Anda membingungkan tingkat abstraksi. Seperti yang sudah ditunjukkan oleh jawaban lain, CREATE TYPE hanya mendaftarkan jenis (gabungan / baris) dalam sistem. Sementara ROW konstruktor sebenarnya mengembalikan satu baris.
Jenis baris yang dibuat dengan ROW konstruktor tidak mempertahankan nama kolom, yang menjadi jelas saat Anda mencoba mengonversi baris ke JSON.
Saat melakukannya, ROW hanyalah kata berisik sebagian besar waktu. Dokumentasi:
Demo:
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 dan j1 pertahankan nama kolom asli.r2 dan j2 jangan.r3 dan j3 adalah sama; untuk mendemonstrasikan bagaimana ROW hanya kebisingan.r4 dan j4 membawa nama kolom dari jenis terdaftar.
Anda dapat mentransmisikan baris (rekaman) ke jenis baris terdaftar jika angka dan tipe data elemen cocok dengan jenis baris - nama kolom input diabaikan.