診療所、医師、および利用可能な予約の 3 レベルの階層のフラットな表現を返す次のクエリがあります。
select * from search_by_location(20,138.6,-34.9,null,0,0,1,99,current_date,7)
これをサブクエリとして使用して、適切な 3 レベルの階層を生成しようとしています。
with
a as (select * from search_by_location(20,138.6,-34.9,null,0,0,1,99,current_date,7)),
b as (
select business_name,
address1,
address2,
suburb,
postcode,
state_acronym,
phone_no,
latitude,
longitude,
clinic_url_display_name,
(first_name,
preferred_name,
last_name,
gender,
doctor_url_display_name,
gravatar_md5,
array_agg(appointment_start)
)::doctor_appointments_row doctor
from a
group by business_name,
address1,
address2,
suburb,
postcode,
state_acronym,
phone_no,
latitude,
longitude,
clinic_url_display_name,
first_name,
preferred_name,
last_name,
gender,
doctor_url_display_name,
gravatar_md5
)
select (business_name,
(address1,
address2,
suburb,
postcode,
state_acronym
)::address_row,
phone_no,
(latitude,
longitude)::coords_row,
clinic_url_display_name,
array_agg(doctor)
)::clinic_doctor_appointments_row clinic
from b
group by business_name,
address1,
address2,
suburb,
postcode,
state_acronym,
phone_no,
latitude,
longitude,
clinic_url_display_name
実行すると、次のエラー メッセージが表示されます。
ERROR: malformed record literal: "0811112222"
DETAIL: Missing left parenthesis.
クエリのどこにもそのリテラルを指定していないため、これは奇妙です。これは、基本クエリ、特にphone_no
列からのデータです。このエラーの原因と解決方法について何か考えはありますか?
アップデート:
これはエラーなしで実行されます (クエリの s の後の部分を置き換えるだけですwith
):
with
a as (select * from search_by_location(20,138.6,-34.9,null,0,0,1,99,current_date,7)),
b as (
select business_name,
address1,
address2,
suburb,
postcode,
state_acronym,
phone_no,
latitude,
longitude,
clinic_url_display_name,
(first_name,
preferred_name,
last_name,
gender,
doctor_url_display_name,
gravatar_md5,
array_agg(appointment_start)
)::doctor_appointments_row doctor
from a
group by business_name,
address1,
address2,
suburb,
postcode,
state_acronym,
phone_no,
latitude,
longitude,
clinic_url_display_name,
first_name,
preferred_name,
last_name,
gender,
doctor_url_display_name,
gravatar_md5
)
select * from b
この場合、array_agg
バグがあると思われる のネストはありません。