mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Allow RECORD and RECORD[] to be specified in function coldeflists.
We can't allow these pseudo-types to be used as table column types, because storing an anonymous record value in a table would result in data that couldn't be understood by other sessions. However, it seems like there's no harm in allowing the case in a column definition list that's specifying what a function-returning-record returns. The data involved is all local to the current session, so we should be just as able to resolve its actual tuple type as we are for the function-returning-record's top-level tuple output. Elvis Pranskevichus, with cosmetic changes by me Discussion: https://postgr.es/m/11038447.kQ5A9Uj5xi@hammer.magicstack.net
This commit is contained in:
@ -667,6 +667,17 @@ select row(1, '(1,2)')::testtype6 *<> row(1, '(1,3)')::testtype6;
|
||||
t
|
||||
(1 row)
|
||||
|
||||
-- anonymous rowtypes in coldeflists
|
||||
select q.a, q.b = row(2), q.c = array[row(3)], q.d = row(row(4)) from
|
||||
unnest(array[row(1, row(2), array[row(3)], row(row(4))),
|
||||
row(2, row(3), array[row(4)], row(row(5)))])
|
||||
as q(a int, b record, c record[], d record);
|
||||
a | ?column? | ?column? | ?column?
|
||||
---+----------+----------+----------
|
||||
1 | t | t | t
|
||||
2 | f | f | f
|
||||
(2 rows)
|
||||
|
||||
drop type testtype1, testtype2, testtype3, testtype4, testtype5, testtype6;
|
||||
--
|
||||
-- Test case derived from bug #5716: check multiple uses of a rowtype result
|
||||
|
@ -259,6 +259,12 @@ select row(1, '(1,2)')::testtype6 *< row(1, '(1,3)')::testtype6;
|
||||
select row(1, '(1,2)')::testtype6 *>= row(1, '(1,3)')::testtype6;
|
||||
select row(1, '(1,2)')::testtype6 *<> row(1, '(1,3)')::testtype6;
|
||||
|
||||
-- anonymous rowtypes in coldeflists
|
||||
select q.a, q.b = row(2), q.c = array[row(3)], q.d = row(row(4)) from
|
||||
unnest(array[row(1, row(2), array[row(3)], row(row(4))),
|
||||
row(2, row(3), array[row(4)], row(row(5)))])
|
||||
as q(a int, b record, c record[], d record);
|
||||
|
||||
drop type testtype1, testtype2, testtype3, testtype4, testtype5, testtype6;
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user