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

Id cột Doctrine không tồn tại trên PostgreSQL

user là một từ dành riêng . Đó là bí danh cho current_user .

regress=> SELECT * FROM user;
 current_user 
--------------
 myusername
(1 row)

Nếu bạn muốn sử dụng user dưới dạng tên bảng, vì là từ dành riêng nên bạn phải trích dẫn số nhận dạng , ví dụ:

SELECT id FROM "user";

ORM của bạn phải trích dẫn tất cả các số nhận dạng, hoặc ít nhất là các từ dành riêng. Không làm như vậy là lỗi trong ORM của bạn. Bạn có thể khắc phục lỗi ORM bằng cách sử dụng một từ không dành riêng làm tên bảng.

Tôi nghĩ rằng đó là một chút mụn cóc trong psql rằng nó sẽ tự động trích dẫn các số nhận dạng mà bạn chuyển cho các lệnh gạch chéo ngược. Vì vậy, \d user sẽ hoạt động nhưng select * from user sẽ không. Bạn phải viết \d "user" . Vấn đề tương tự cũng phát sinh với phân biệt chữ hoa chữ thường trong đó \d MyTable hoạt động nhưng SELECT * FROM MyTable sẽ không hoạt động, bạn phải viết SELECT * FROM "MyTable" .

Thật tuyệt khi đưa ra một HINT thông báo về điều này trong lỗi. Thật không may, trình phân tích cú pháp và trình lập kế hoạch không thực sự có đủ thông tin tại thời điểm lỗi "cột không tồn tại" được tạo ra để biết rằng bạn đã viết một từ khóa ban đầu, tất cả những gì nó thấy là quét hàm tại thời điể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. Thời gian giữa hai sự kiện

  2. Postgres CTE:loại ký tự thay đổi (255) [] trong thuật ngữ không đệ quy nhưng loại ký tự thay đổi [] tổng thể

  3. Làm thế nào để sử dụng ANY thay vì IN trong mệnh đề WHERE với Rails?

  4. Sự cố khôi phục cơ sở dữ liệu Heroku

  5. Làm cách nào để truyền tham số vào một hàm postgre và lấy dữ liệu bằng ExecuteReader?