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 đó.