user
予約語
。 current_user
のエイリアスです 。
regress=> SELECT * FROM user;
current_user
--------------
myusername
(1 row)
user
を使用する場合 テーブル名として、予約語であるため、識別子を引用する必要があります。 例:
SELECT id FROM "user";
ORMは、すべての識別子、または少なくとも予約語を引用する必要があります。そうしないと、ORMのバグになります。予約されていない単語をテーブル名として使用することで、ORMのバグを回避できます。
psql
では少し疣贅だと思います バックスラッシュコマンドに渡す識別子を自動的に引用します。したがって、\d user
動作しますが、select * from user
しません。 \d "user"
と書く必要があります 。 \d MyTable
の場合、大文字と小文字の区別についても同じ問題が発生します。 動作しますが、SELECT * FROM MyTable
動作しません。SELECT * FROM "MyTable"
と記述する必要があります。 。
HINT
を与えるといいでしょう エラーでこれについてのメッセージ。残念ながら、「列が存在しません」というエラーが生成された時点では、パーサーとプランナーは実際には十分な情報を持っていないため、最初にキーワードを記述したことがわかります。表示されるのは、その時点での関数スキャンだけです。