0

診療所、医師、および利用可能な予約の 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バグがあると思われる のネストはありません。

4

1 に答える 1