回答:
素晴らしいドキュメントによると、これはあなたが探しているものかもしれないと思います。
SQL識別子とキーワードは、文字(az、または発音区別符号付きの文字と非ラテン文字)または下線(_)で始まる必要があります。識別子またはキーワードの後続の文字には、文字、アンダースコア、数字(0〜9)、またはドル記号($)を使用できます。ドル記号は、SQL標準の文字に従って識別子では許可されていないため、それらを使用するとアプリケーションの移植性が低下する可能性があることに注意してください...
pg_
Nathan Cが述べたように、そのリンクにアンダースコアを追加したいと思うかもしれません。
ドキュメントによると、pg_
予約されているため、で開始することもできません。それ以外はかなりフリーフォームに見えます。
正解は、gsiemsが提供するものです。ただし、PostgreSQLには、覚えておいてもよい引用された識別子に関するルールがあることを指摘しておきます。「引用符で囲まれた識別子には、コードがゼロの文字を除いて、任意の文字を含めることができます。(二重引用符を含めるには、2つの二重引用符を書きます。)」...見たい場合にも、いくつかの制限があります。
したがって、識別子を引用する場合は、\ 0を除いて任意の文字を使用できます。ただし、識別子を引用しない場合は、そのページで概説されているルールに従う必要があります。
これを指摘したかったのは、主に以前に私に噛まれたからです。特に、引用符で囲まれていない識別子(およびスキーマ名は識別子としてカウントされます)の大文字と小文字の区別に関するルールです。
更新:
例として(スキーマ識別子には特に適用されませんが、それらにも等しく適用されます):
DROP TABLE "tbluser"; -- assuming it exists
DROP TABLE "TBLUSER"; -- assuming it exists; incidentally, they are two different tables
CREATE TABLE "TBLUSER" ( username text );
INSERT INTO "TBLUSER" VALUES ( 'joe' );
SELECT * FROM TBLUSER; -- this returns an error that the tbluser relation does not exist
SELECT * FROM "TBLUSER"; -- works fine
これは、PostgreSQL(およびおそらくSQL標準)の経験者には予想される動作ですが、PGに不慣れで他のデータベースサーバー(SQL ServerまたはOracleなど)の立場から来た人は、この動作にぶつかることがあります。作成したばかりのテーブルが見つからないのはなぜでしょうか。
おそらく一部のマニュアルでは引用識別子の使用を推奨していませんが、問題は引用識別子が使用可能であり、使用できることです。さらに、多くのパッケージでは、関係のないリレーションを作成してアクセスするときに常に引用識別子を使用することをポリシーにしています。 PGAdmin IIIなどの完全に小文字。
たとえば、これは、UIを介してテーブルを作成するときにPGAdmin IIIによって生成されるスクリプトです。
CREATE TABLE public."TBLUSER"
(
username text
)
WITH (
OIDS = FALSE
)
;
したがって、ユーザーがクエリでこのテーブルにアクセスできる唯一の方法は、引用された識別子、つまりを参照すること"TBLUSER"
です。引用符で囲まれていない識別子を使用してクエリでこのテーブルにアクセスしようとすると、リレーションの検索に失敗しますTBLUSER
。