postgresql に対するPDOのqueryがうまくいかないので、調べたところ,SQLがTableが見つかりませんのエラーだった
ダブルクォート有り無しでテーブルが見つからない
クォート無し
my_db=# select gid from tbl_name_A limit 1; ERROR: relation "tbl_name_a" does not exist LINE 1: select gid from tbl_name_a limit 1;
クォートアリ
my_db=# select gid from "tbl_name_A" limit 1; gid ----- 5 (1 row)
同じ名前で指定してるのにダブルクォートが無いとテーブルが見つからない。
ダブルクォートがテーブル名の一部になってる
テーブル定義
テーブル定義を参照すると、テーブル名にダブルクォテーショオンされている
CREATE TABLE "tbl_name_A" ( CREATE TABLE tbl_name_1 (
しかしテーブル一覧では同じに扱われる
psql#\dt Schema | Name | Type | Owner --------+--------------------+-------+---------- public | tbl_name_A | table | postgres public | tbl_name_1 | table | postgres
これは困る
ダブルクォート有り無しのテーブル名が一つのデータベースが混在するとめんどくさいです.
ちなみに実験環境は
Windows7 の postgresql Win x86版です
混在に気づかない原因は pgAdminの自動クォート
結局何が原因かというと
Postgresのテーブル名は小文字が基本らしい。大文字を使うならダブルクォートしろって事らしい.
PG作る人の視点 大文字テーブル名はダブルクォート必須 PG使う側の視点 大文字テーブル名はダブルクォートがテーブル名の一部
これはどう考えてもおかしい.
ダブルクォートがテーブル名の一部になるようなこの仕様は・・・・困りますね