2017-08-06 13 views
0

私はローカルデータベースにuserテーブルがあり、Posticoを使用してSQLクエリを実行しようとすると、postgresシステムテーブルuserと重複して見えるという奇妙な問題が発生しました。私はdbに対してクエリを実行している間に、dbにアクセスするユーザ名にマップするcurrent_userカラムを返します。ローカルのDBユーザーテーブルを指すようにSQLに何を変更する必要がありますか?私が実行しようとしているシステムとローカルDBのPostgres重複テーブル名

SQLコマンド:

SELECT * 
FROM user 
; 

current_user: johndoe

UPDATE user 
SET user.password = 'cryptopw', user.authentication_token = NULL 
WHERE user.user_id = 210; 

答えて

1

USERを返さの一つであるkey words for PostgreSQLを禁じます。また、ドキュメントからSQL 2011、2008年と92

のために予約されています

SQLはと非予約キーワードを予約区別されます。標準によると、予約されたキーワードは唯一の本当のキーワードです。それらは識別子として許可されません。

強調鉱山あなたがトラブルを避けたい場合、つまり(識別子としてuserを使用していない、ある

:それは、テーブルの名前、またはべきではありません列、索引、制約、関数など)。

あなたはまだ試してみたい場合は

:一般的なルールとして

、あなたがに試してみてください識別子として列挙されたキーワードのいずれかを含むコマンドのために偽のパーサーエラーを取得する場合は、識別子を引用問題が解消するかどうかを確認します。 、しようとされて

SELECT 
    * 
FROM 
    "user" ; 

UPDATE 
    "user" 
SET 
    password = 'cryptopw',  -- not "user".password 
    authentication_token = NULL -- not "user". authentication_token 
WHERE 
    "user".user_id = 210;   -- you can, but don't need "user" 

私は実際に、テーブルの名前を変更my_user(またはapplication_userまたは他の何か)を呼び出し、SQL標準に従うだろう、と識別子を引用することを忘れてしまいます。

+0

ありがとうございます。これは非常に役に立ち、私は同意する、私は私のテーブルの新しい名前を選択する必要があります。 – cphill

関連する問題