sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvad bruges en rækkekonstruktør til?

Du forvirrer abstraktionsniveauer. Som andre svar allerede påpeger, CREATE TYPE registrerer kun en (sammensat / række) type i systemet. Mens en ROW konstruktør returnerer faktisk en række.

En rækketype oprettet med ROW constructor bevarer ikke kolonnenavne, hvilket bliver tydeligt, når du forsøger at konvertere rækken til JSON.

Mens du er i gang, ROW er bare et støjord det meste af tiden. Dokumentationen:

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;

db<>fiddle her
sqlfiddle

r1 og j1 bevar originale kolonnenavne.
r2 og j2 ikke.
r3 og j3 er det samme; for at demonstrere hvordan ROW er bare støj.
r4 og j4 bære kolonnenavnene af den registrerede type.

Du kan caste rækken (record) til en registreret rækketype hvis nummer og datatyper af elementerne matcher rækketypen - navne af inputfelter ignoreres.



  1. Bedste lagringsmotor til konstant skiftende data

  2. SQL Forespørgsel med fagforening og join

  3. Undgå at indsætte eksponentiel værdi i DB Float-kolonnen

  4. Hvorfor nedsætter MYSQL højere LIMIT offset forespørgslen?