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

Cú pháp đúng cho mảng kiểu kết hợp

Lời khuyên cho đến nay không phải là tối ưu. Có một giải pháp đơn giản hơn và một lời giải thích thực sự có thể áp dụng được.
Khi nghi ngờ, chỉ cần yêu cầu Postgres chỉ cho bạn :

CREATE TEMP TABLE pencil_count (  -- table also registers row type
  pencil_color varchar(30)
, count integer
);

CREATE TEMP TABLE pencils (
  id serial
, pencils_ pencil_count[]
);

Chèn 2 hàng cơ bản:

INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);

Xem cú pháp cho loại hàng cơ bản :

SELECT p::text AS p_row FROM pencil_count p;

  p_row
----------
 (red,1)
 (blue,2)

Xem cú pháp cho một mảng hàng :

SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;

       p_row_arr
------------------------
 {"(red,1)","(blue,2)"}

Tất cả những gì bạn cần là đặt mỗi hàng theo nghĩa đen trong dấu ngoặc kép - điều này chỉ cần thiết để vô hiệu hóa ý nghĩa đặc biệt của dấu phẩy trong mỗi loại hàng.
Dấu ngoặc kép bổ sung (thoát) sẽ là nhiễu dư thừa trong khi không có ký tự đặc biệt bổ sung.

Không có gì trong số này liên quan đến cú pháp chuỗi thoát , đã bị tắt theo mặc định kể từ Postgres 9.1. Bạn sẽ phải khai báo cú pháp chuỗi thoát một cách rõ ràng bằng tiền tố E , như E'string\n' . Nhưng không có lý do chính đáng để làm điều đó.

db <> fiddle tại đây
sqlfiddle

Câu trả lời liên quan với giải thích thêm:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tách mảng 2d thành mảng 1d một cách nhanh chóng trong PostgreSQL?

  2. không có mục nhập pg_hba.conf cho máy chủ

  3. heroku, postgreSQL, django, comments, Deliciousypie:Không có toán tử nào phù hợp với (các) loại đối số và tên đã cho. Bạn có thể cần thêm phôi loại rõ ràng

  4. Tự động cộng gộp, nhưng bỏ qua các giá trị hiện có trong cột

  5. Cập nhật khóa lồng nhau với trường json postgres trong Rails