From: | Quan Zongliang <quanzongliang(at)yeah(dot)net> |
---|---|
To: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
Cc: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: PL/pgSQL: Incomplete item Allow handling of %TYPE arrays, e.g. tab.col%TYPE[] |
Date: | 2023-11-23 12:27:51 |
Message-ID: | ead1c86f-3f6c-4c05-88e2-692549551b48@yeah.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 2023/11/20 17:33, Pavel Stehule wrote:
>
>
> I did some deeper check:
>
> - I don't like too much parser's modification (I am sending alternative
> own implementation) - the SQL parser allows richer syntax, and for full
> functionality is only few lines more
Agree.
>
> - original patch doesn't solve %ROWTYPE
>
> (2023-11-20 10:04:36) postgres=# select * from foo;
> ┌────┬────┐
> │ a │ b │
> ╞════╪════╡
> │ 10 │ 20 │
> │ 30 │ 40 │
> └────┴────┘
> (2 rows)
>
> (2023-11-20 10:08:29) postgres=# do $$
> declare v foo%rowtype[];
> begin
> v := array(select row(a,b) from foo);
> raise notice '%', v;
> end;
> $$;
> NOTICE: {"(10,20)","(30,40)"}
> DO
>
two little fixes
1. spelling mistake
ARRAY [ icons ] --> ARRAY [ iconst ]
2. code bug
if (!OidIsValid(dtype->typoid)) --> if (!OidIsValid(array_typeid))
> - original patch doesn't solve type RECORD
> the error message should be more intuitive, although the arrays of
> record type can be supported, but it probably needs bigger research.
>
> (2023-11-20 10:10:34) postgres=# do $$
> declare r record; v r%type[];
> begin
> v := array(select row(a,b) from foo);
> raise notice '%', v;
> end;
> $$;
> ERROR: syntax error at or near "%"
> LINE 2: declare r record; v r%type[];
> ^
> CONTEXT: invalid type name "r%type[]"
>
Currently only scalar variables are supported.
This error is consistent with the r%type error. And record arrays are
not currently supported.
Support for r%type should be considered first. For now, let r%type[]
report the same error as record[].
I prefer to implement it with a new patch.
> - missing documentation
My English is not good. I wrote it down, please correct it. Add a note
in the "Record Types" documentation that arrays and "Copying Types" are
not supported yet.
>
> - I don't like using the word "partitioned" in the regress test name
> "partitioned_table". It is confusing
fixed
>
> Regards
>
> Pavel
Attachment | Content-Type | Size |
---|---|---|
plpgsql-typearr-v3.patch | text/plain | 8.0 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Matthias van de Meent | 2023-11-23 12:33:44 | Re: Parallel CREATE INDEX for BRIN indexes |
Previous Message | Hayato Kuroda (Fujitsu) | 2023-11-23 12:15:22 | RE: Random pg_upgrade test failure on drongo |