あなたは抽象化のレベルを混乱させています。他の回答がすでに指摘しているように、CREATE TYPE
(複合/行)タイプのみをシステムに登録します。 ROW
コンストラクターは実際に行を返します。
ROW
で作成された行タイプ コンストラクターは列名を保持しません。これは、行をJSONに変換しようとすると明らかになります。
そこにいる間、ROW
単なるノイズワードです ほとんどの時間。 ドキュメント:
デモ:
SELECT t AS r1, row_to_json(t) AS j1
, ROW(1, 'x', NUMERIC '42.1') AS r2, row_to_json(ROW(1, 'x', NUMERIC '42.1')) AS j2
, (1, 'x', NUMERIC '42.1') AS r3, row_to_json( (1, 'x', NUMERIC '42.1')) AS j3
, (1, 'x', '42.1')::myrowtype AS r4, row_to_json((1, 'x', '42.1')::myrowtype) AS j4
FROM (SELECT 1, 'x', NUMERIC '42.1') t;
r1
およびj1
元の列名を保持します。r2
およびj2
しないでください。r3
およびj3
同じだ; ROW
ただのノイズです。r4
およびj4
登録されたタイプの列名を付けます。
number の場合、行(レコード)を登録済みの行タイプにキャストできます およびデータ型 の要素が行タイプに一致します-名前 入力フィールドの数は無視されます。