Thread: Do you know a json_populate_record alternative method to create a ROW with a named field notation?
Do you know a json_populate_record alternative method to create a ROW with a named field notation?
From
Stéphane Klein
Date:
Hello,
In this example:
```
CREATE TYPE contact AS (
firstname VARCHAR,
lastname VARCHAR
);
postgres=# SELECT json_populate_record(NULL::contact,
postgres(# '{
postgres'# "firstname": "John",
postgres'# "lastname": "Doe"
postgres'# }'
postgres'# );
json_populate_record
----------------------
(John,Doe)
(1 row)
```
**Question:** do you know a method like json_populate_record (https://www.postgresql.org/docs/13/functions-json.html), which allows creating a `ROW` with named field notation without using a json format?
I know the `ROW` syntax expression:
```
postgres=# SELECT ROW('John', 'Doe')::contact;
row
------------
(John,Doe)
(1 row)
```
But I didn't find a `ROW` constructors (https://www.postgresql.org/docs/13/sql-expressions.html#SQL-SYNTAX-ROW-CONSTRUCTORS) syntax allowing a named field notation.
Best regards,
Stéphane
--
```
CREATE TYPE contact AS (
firstname VARCHAR,
lastname VARCHAR
);
postgres=# SELECT json_populate_record(NULL::contact,
postgres(# '{
postgres'# "firstname": "John",
postgres'# "lastname": "Doe"
postgres'# }'
postgres'# );
json_populate_record
----------------------
(John,Doe)
(1 row)
```
**Question:** do you know a method like json_populate_record (https://www.postgresql.org/docs/13/functions-json.html), which allows creating a `ROW` with named field notation without using a json format?
I know the `ROW` syntax expression:
```
postgres=# SELECT ROW('John', 'Doe')::contact;
row
------------
(John,Doe)
(1 row)
```
But I didn't find a `ROW` constructors (https://www.postgresql.org/docs/13/sql-expressions.html#SQL-SYNTAX-ROW-CONSTRUCTORS) syntax allowing a named field notation.
Best regards,
Stéphane
--
Re: Do you know a json_populate_record alternative method to create a ROW with a named field notation?
From
Tom Lane
Date:
=?UTF-8?Q?St=C3=A9phane_Klein?= <contact@stephane-klein.info> writes: > **Question:** do you know a method like json_populate_record ( > https://www.postgresql.org/docs/13/functions-json.html), which allows > creating a `ROW` with named field notation without using a json format? You mean you want to give the field names explicitly in the expression? The closest thing I can think of is to make a constructor function and invoke it with named-argument notation: regression=# CREATE TYPE contact AS ( regression(# firstname VARCHAR, regression(# lastname VARCHAR regression(# ); CREATE TYPE regression=# create function make_contact(firstname varchar, lastname varchar) regression-# returns contact as 'select row(firstname, lastname)::contact' regression-# language sql; CREATE FUNCTION regression=# select make_contact(firstname => 'John', lastname => 'Doe'); make_contact -------------- (John,Doe) (1 row) A bit tedious to set up, but it would have some advantages, eg you could provide default values. regards, tom lane