sql >> Database >  >> RDS >> PostgreSQL

Waar wordt een rijconstructor voor gebruikt?

Je verwart niveaus van abstractie. Zoals andere antwoorden al aangeven, CREATE TYPE registreert alleen een (samengesteld / rij) type in het systeem. Terwijl een ROW constructor retourneert eigenlijk een rij.

Een rijtype gemaakt met de ROW constructor bewaart geen kolomnamen, wat duidelijk wordt wanneer u de rij naar JSON probeert te converteren.

Terwijl je toch bezig bent, ROW is slechts een ruiswoord meestal. De documentatie:

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 hier
sqlfiddle

r1 en j1 originele kolomnamen behouden.
r2 en j2 niet doen.
r3 en j3 zijn hetzelfde; om te demonstreren hoe ROW is gewoon ruis.
r4 en j4 dragen de kolomnamen van het geregistreerde type.

U kunt de rij (record) casten naar een geregistreerd rijtype als nummer en gegevenstypen van de elementen komt overeen met het rijtype - namen invoervelden worden genegeerd.



  1. Een externe sleutel toevoegen aan een bestaande tabel

  2. Levenshtein-functie gebruiken op elk element in een tsvector?

  3. Stappen die u moet nemen als u een MySQL-storing heeft

  4. MySQL GROUP BY-gedrag