user adalah kata khusus
. Ini adalah alias untuk current_user .
regress=> SELECT * FROM user;
current_user
--------------
myusername
(1 row)
Jika Anda ingin menggunakan user sebagai nama tabel, karena ini adalah kata yang dicadangkan, Anda harus mengutip pengenalnya , misalnya:
SELECT id FROM "user";
ORM Anda harus mengutip semua pengidentifikasi, atau setidaknya kata-kata yang dicadangkan. Kegagalan untuk melakukannya adalah bug di ORM Anda. Anda dapat mengatasi bug ORM dengan menggunakan kata non-reserved sebagai nama tabel.
Saya pikir ini sedikit kutil di psql yang secara otomatis mengutip pengidentifikasi yang Anda berikan ke perintah garis miring terbalik. Jadi \d user akan berfungsi tetapi select * from user tidak akan. Anda harus menulis \d "user" . Masalah yang sama muncul dengan sensitivitas huruf besar-kecil di mana \d MyTable berfungsi tetapi SELECT * FROM MyTable tidak akan bekerja, Anda harus menulis SELECT * FROM "MyTable" .
Akan lebih baik untuk memberikan HINT pesan tentang ini dalam kesalahan. Sayangnya pengurai dan perencana tidak benar-benar memiliki informasi yang cukup pada saat kesalahan "kolom tidak ada" dibuat untuk mengetahui bahwa Anda awalnya menulis kata kunci, yang dilihatnya hanyalah pemindaian fungsi pada saat itu.