PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

За какво се използва конструктор на ред?

Бъркате нивата на абстракция. Както вече посочват други отговори, CREATE TYPE регистрира само тип (съставен / ред) в системата. Докато ROW конструкторът всъщност връща ред.

Тип ред, създаден с ROW конструкторът не запазва имена на колони, което става очевидно, когато се опитате да конвертирате реда в JSON.

Докато сте там, ROW е просто шумна дума през повечето време. Документацията:

Демо:

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 тук
sqlfiddle

r1 и j1 запазва оригиналните имена на колони.
r2 и j2 недей.
r3 и j3 са същите; за да демонстрирате как ROW е просто шум.
r4 и j4 носят имената на колоните от регистрирания тип.

Можете да прехвърлите реда (записа) към регистриран тип ред, ако номер и типове данни от елементите съответстват на типа ред - имена от полетата за въвеждане се игнорират.



  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

  2. Как да създадете някакъв вид итератор (или изкуствен идентификатор) за даден набор от редове?

  3. PostgreSQL:Нарушение на производителността за свързване на две таблици в отделни схеми

  4. Как се изпуска шаблонна база данни от PostgreSQL?

  5. как postgres да игнорира вмъквания с дублиран ключ, но да продължи