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.