PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Do czego służy konstruktor wierszy?

Mylisz poziomy abstrakcji. Jak już wskazują inne odpowiedzi, CREATE TYPE rejestruje tylko typ (złożony/wierszowy) w systemie. Podczas gdy ROW Konstruktor faktycznie zwraca wiersz.

Typ wiersza utworzony za pomocą ROW Konstruktor nie zachowuje nazw kolumn, co staje się oczywiste, gdy próbujesz przekonwertować wiersz na JSON.

Będąc przy tym, ROW to tylko hałasowe słowo większość czasu. Dokumentacja:

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

r1 i j1 zachowaj oryginalne nazwy kolumn.
r2 i j2 nie.
r3 i j3 są takie same; aby zademonstrować, jak ROW to tylko hałas.
r4 i j4 nosić nazwy kolumn zarejestrowanego typu.

Możesz rzutować wiersz (rekord) na zarejestrowany typ wiersza, jeśli liczba i typy danych elementów pasuje do typu wiersza - nazwy pól wejściowych jest ignorowanych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:Jak uciec '?

  2. PostgreSQL:jak ustawić search_path z wnętrza funkcji?

  3. LIKE zapytanie dotyczące elementów płaskiej tablicy jsonb

  4. PostgreSQL - Sprawdź, czy klucz obcy istnieje podczas wykonywania SELECT

  5. Migracja z MySQL do PostgreSQL