2017-03-23 10 views
-1

postgresqlの数字で始まるテーブルを作成するよう提案できますか?postgresqlの数字で始まるテーブルを作成する

+1

あなたはそうではありません。 '' SQL識別子とキーワードは英字(az、しかし分音記号と非ラテン文字の文字)またはアンダースコア(_)で始まらなければなりません。 " - https://www.postgresql.org/docs/9.0 /static/sql-syntax-lexical.html – David

+0

実際には、二重引用符で表を作成できます。 "5258_emp"しかし、私はそのテーブルに値を格納する..それはエラーを表示します。 – Ashish

+0

''実際には、二重引用符でテーブルを作成することができます。例えば、 "5258_emp" "' - 自分の質問に答えたように聞こえます。常にあなたの識別子を囲むことを忘れない限り、それはうまくいくはずです。それはまだ最良のアイデアではありませんが。 – David

答えて

1

使用二重引用符、例えば:

t=# create table "42 Might be not The be$t idea" (i serial); 
CREATE TABLE 
t=# \d+ "42 Might be not The be$t idea" 
              Table "public.42 Might be not The be$t idea" 
Column | Type |         Modifiers         | Storage | Stats target | Descript 
ion 
--------+---------+-----------------------------------------------------------------------------+---------+--------------+--------- 
---- 
i  | integer | not null default nextval('"42 Might be not The be$t idea_i_seq"'::regclass) | plain |    | 

は、それが何につながるの近くに見てください。一般に大文字と小文字を混在させて使用すると、特殊文字や数字との開始関係は悪い習慣になります。 Postgresがこのような関係名を理解しているにも関わらず、他のソフトウェアでバグを被る危険性があります。

経験がなければ、おそらく足で自分を撃ちます。例:pg_dump -t "badName"は動作しません。 Bashは二重引用符を自分自身として理解します - これはこのように動作することを意味します。したがって、テーブルを見つけるにはpg_dump -t '"badName"'を指定する必要があります。テーブルを見つけられない場合は、あなたは幸運です。災害は同じスキーマにbadnameBadnameがあるときです。

それが実行可能であるという事実は、あなたがそれを使用することに踏み出すべきではありません。

+0

私は意図的にシリアルでテーブルを作成しました(シーケンス自体に名前を付けます)。 –

+0

あなたは正しいです - 私は警告を入れておくべきです。だから私はやった。 –

関連する問題