st 1. 1. 2020 v 16:50 odesÃlatel Ashutosh Sharma <ashu.coe...@gmail.com> napsal:
> Hi All, > > When a ROW variable having NULL value is assigned to a RECORD > variable, it gives no structure to the RECORD type variable. Let's > consider the following example. > > create table t1(a int, b text); > > insert into t1 values(1, 'str1'); > > create or replace function f1() returns void as > $$ > declare > row t1%ROWTYPE; > rec RECORD; > begin > row := NULL; > rec := row; > raise info 'rec.a = %, rec.b = %', rec.a, rec.b; > end; > $$ language plpgsql; > > In above example as 'row' variable is having NULL value, assigning > this to 'rec' didn't give any structure to it although 'row' is having > a predefined structure. Here is the error observed when above function > is executed. > > select f1(); > ERROR: record "rec" is not assigned yet > > This started happening from the following git commit onwards, > > commit 4b93f57999a2ca9b9c9e573ea32ab1aeaa8bf496 > Author: Tom Lane <t...@sss.pgh.pa.us> > Date: Tue Feb 13 18:52:21 2018 -0500 > > Make plpgsql use its DTYPE_REC code paths for composite-type variables. > > I know this is expected to happen considering the changes done in > above commit because from this commit onwards, NULL value assigned to > any row variable represents a true NULL composite value before this > commit it used to be a tuple with each column having null value in it. > But, the point is, even if the row variable is having a NULL value it > still has a structure associated with it. Shouldn't that structure be > transferred to RECORD variable when it is assigned with a ROW type > variable ? Can we consider this behaviour change as a side effect of > the improvement done in the RECORD type of variable? > +1 Pavel > -- > With Regards, > Ashutosh Sharma > EnterpriseDB:http://www.enterprisedb.com > > >