« 改めて『雨情碑』を見てみた。 | トップページ | ギミックもデザインもグッドな『テープカッター』を買ってみた。 »

2013年2月24日 (日)

『phpPgAdmin』の落とし穴…"does not exist"!!!

初心者なので、思いっきり嵌りました…。

事の始まりは、『phpPgAdmin』でテーブル『user』を作成したこと。

『MySQL』で作成したテーターベースの移行を行う際に食らいました。

何のエラーもないのに

SELECT * FROM user WHERE flag=0;
ERROR:  column "flag" does not exist

と表示される…。

表中には、ちゃんと『user』が表示されている。

\d
                 List of relations
Schema |        Name        |   Type   |  Owner
--------+--------------------+----------+----------
public | user               | table    | postgres
(1 rows)

コマンドでテーブルを参照したってちゃんとある!
なのに、参照できない…。

原因が不明…

散々あがいた結果、

pg_dump -h localhost -D database -t user -U user

の出力がヒントになった。

create table "user"(
    flag integer DEFAULT 0 NOT NULL
);

となっている。

これから『"』を除いてコマンドから作成を試みる。
『phpPgAdmin』でテーブルを削除。

create table user(
    flag integer DEFAULT 0 NOT NULL
);
ERROR:  syntax error at or near "user" at character 14
LINE 1: create table user(
                     ^
とエラーが表示された…。

create table "user"(
    flag integer DEFAULT 0 NOT NULL
);
CREATE TABLE

こちらだと成功した…。

ガ━━━(゚Д゚;)━━━ン!

もしかして、『user』ではなく『"user"』なのか?

INSERT INTO "user" (flag) VALUES (1);
INSERT 0 1
INSERT INTO "user" (flag) VALUES (0);
INSERT 0 1
と登録したらできた…。

しかも、

select * from "user";
flag
------
    1
    0
(2 rows)

『select』で表示もできた…。

select * from "user" where flag=1;
flag
------
    1
(1 row)

select * from "user" where "user".flag=1;
このような記述もできることから
『"user"』は、『"』も含めた文字列なのだろう。

どうやら『user』は、予約語で、『phpPgAdmin』で登録すると『"user"』で登録される。
そして『"』も1文字として扱われ、『user』と『"user"』は、
明確に違うのに表示は、同じ場合がある。

ならばこれは?

create table 'user'(
    flag integer DEFAULT 0 NOT NULL
);

これは、駄目だった…。

今回の嵌り所は…

テーブル名では『"』が文字として使われているが表示されない。
『user』などの予約語がある。
と言った所だろうか…。

『MySQL』なら、『user』でもテーブルを作れたのに…。

泣きが入りました…。

|

« 改めて『雨情碑』を見てみた。 | トップページ | ギミックもデザインもグッドな『テープカッター』を買ってみた。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/108365/56834668

この記事へのトラックバック一覧です: 『phpPgAdmin』の落とし穴…"does not exist"!!!:

« 改めて『雨情碑』を見てみた。 | トップページ | ギミックもデザインもグッドな『テープカッター』を買ってみた。 »