それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

PostgreSQLのテーブル名はダブルクォート有無で別名になった.

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

これは困る

ダブルクォート有り無しのテーブル名が一つのデータベースが混在するとめんどくさいです.

ちなみに実験環境は

Windows7postgresql Win x86版です

混在に気づかない原因は pgAdminの自動クォート

[pgsql-jp: 35444] Re: pgAdminIIIでテーブル定義すると動作がおかしい

結局何が原因かというと

Postgresのテーブル名は小文字が基本らしい。大文字を使うならダブルクォートしろって事らしい.

PG作る人の視点 大文字テーブル名はダブルクォート必須
PG使う側の視点 大文字テーブル名はダブルクォートがテーブル名の一部

これはどう考えてもおかしい.

ダブルクォートがテーブル名の一部になるようなこの仕様は・・・・困りますね