Declare row type variable in PL/pgSQL Declare row type variable in PL/pgSQL postgresql postgresql

Declare row type variable in PL/pgSQL


get only 2-3 columns instead of all columns

One way: use a record variable:

DO $$DECLARE   _rec record;BEGINSELECT INTO _rec            id, name, surname FROM t WHERE id = ?;END $$;

Note that the structure of a record type is undefined until assigned. So you cannot reference columns (fields) before you do that.

Another way: assign multiple scalar variables:

DO $$DECLARE   _id int;   _name text;   _surname text;BEGINSELECT INTO _id, _name, _surname             id,  name,  surname FROM t WHERE id = ?;END $$;

As for your first example: %ROWTYPE is just noise in Postgres. The documentation:

(Since every table has an associated composite type of the same name, it actually does not matter in PostgreSQL whether you write %ROWTYPE or not. But the form with %ROWTYPE is more portable.)

So:

DO $$DECLARE   my_data t;  -- table name serves as type name, too. BEGIN   SELECT INTO my_data  * FROM t WHERE id = ?;END $$;