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

postgresql mảng không đúng định dạng theo nghĩa đen trong tạo tổng hợp initcond

Bạn cần dấu ngoặc kép xung quanh các mảng của mình và đó là bởi vì mảng nằm trong phiên bản văn bản của một hàng.

Dễ dàng kiểm tra bằng cách lấy đầu vào của bạn dưới dạng một hàng và xem cách postgres định dạng nó (cần có dấu ngoặc kép xung quanh các mảng tại đây vì {} là một mảng trong văn bản):

SELECT ROW(0,NULL,NULL, 0, 0, 0, 0, '{}', '{1,2,3,4,5}', '{1,2,3,4,5}', '{0,0.25,0.5,0.75,1}')

Lợi nhuận:

(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")

Do đó bạn cần làm:

...
initcond = '(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")'

Tại sao không bắt buộc phải có dấu ngoặc kép trên một mảng trống hoặc chỉ có một giá trị:

Nhiều giá trị trong một mảng được phân cách bằng dấu phẩy và các trường trong một hàng cũng được phân cách bằng dấu phẩy. Nếu bạn cung cấp một hàng là '(0,{1,2})' , PG sẽ diễn giải đây là ba trường:0 , {1 , 2} . Đương nhiên trong trường hợp đó, bạn sẽ gặp lỗi về một mảng không đúng định dạng. Đặt một trường trong dấu ngoặc kép có nghĩa là mọi thứ trong dấu ngoặc kép đó là một trường. Do đó '(0,"{1,2}")' sẽ được hiểu chính xác là 0 , {1,2} . Nếu mảng trống hoặc chỉ chứa một giá trị, sẽ không có dấu phẩy, vì vậy không có vấn đề gì khi phân tích cú pháp trường đó một cách chính xác.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tách chuỗi đã cho và chuẩn bị câu lệnh trường hợp

  2. PostgreSQL 9.2 - Chuyển đổi chuỗi json TEXT thành kiểu json / hstore

  3. Làm thế nào để có một khóa ngoại trỏ đến hai khóa chính?

  4. PostgreSQL pg_ctl đăng ký lỗi trong Windows 7

  5. Rails - Sử dụng phép nối với các liên kết được đặt tên tùy chỉnh