PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Hàm tạo hàng được sử dụng để làm gì?

Bạn đang nhầm lẫn mức độ trừu tượng. Như các câu trả lời khác đã chỉ ra, CREATE TYPE chỉ đăng ký một kiểu (tổng hợp / hàng) trong hệ thống. Trong khi ROW hàm tạo thực sự trả về một hàng.

Loại hàng được tạo bằng ROW hàm tạo không bảo toàn tên cột, điều này trở nên rõ ràng khi bạn cố gắng chuyển đổi hàng thành JSON.

Trong khi ở đó, ROW chỉ là một từ nhiễu hầu hết thời gian. Tài liệu:

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 tại đây
sqlfiddle

r1j1 giữ nguyên các tên cột ban đầu.
r2j2 không.
r3j3 giống nhau; để chứng minh cách ROW chỉ là tiếng ồn.
r4j4 mang tên cột của loại đã đăng ký.

Bạn có thể truyền hàng (bản ghi) sang loại hàng đã đăng ký nếu số kiểu dữ liệu của các phần tử phù hợp với loại hàng - tên trong số các trường đầu vào bị bỏ qua.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA SequenceGenerator và GeneratedValue:thuộc tính tên / máy tạo chỉ duy nhất cho mỗi lớp?

  2. ComboBox.ValueMember và DisplayMember

  3. làm thế nào để xử lý mật khẩu luôn thay đổi trong sqlalchemy + psycopg2?

  4. Làm thế nào để tạo tệp vĩnh viễn trên Heroku?

  5. giá trị quá dài đối với ký tự loại thay đổi (100) ---- cơ sở dữ liệu được chuyển đổi gần đây, không thực hiện bất kỳ điều gì trong db