エラーの詳細は以下のとおりです。
まず、ダウンロード後解凍したpostgresql-8.0-ja.msiを
ダブルクリックして、Windows2000serverSP4 に
postgreSQL8.02 をインストールしました。
このときユーザpostgreも新規作成しました。
つぎに、ツールpgAdmin3を使用して上記postgreユーザで
データベースtemplate1のpublicスキームの中に、
ID(int4), Book(text)の2フィールド、IDフィールドをキーとして、
tblBooksという名称の練習用の簡単なテーブルを作成しました。
さらに、pgAdmin3を使用して、このtblBooksテーブルに適当なレコードも4件追加でき、
pgAdmin3のテーブルビューで追加したこのレコード4件を確認できました。
また、pgAdmin3のクエリツールを用いて、クエリの下記を実行すると
正常に実行してくれます。
select version();
"PostgreSQL 8.0.2 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)"
ところが、上で作成したtblBooksテーブルを含めたクエリを実行させると、
何回やっても次のようなエラーとなります。
select * from tblBooks;
ERROR: relation "tblbooks" does not exist.------(1)
pgAdmin3でなく、ツールpgSQLを使っても同じエラー(1)がでます。
この"relation does not exist"とは一体どんなエラーなんでしょうか?
環境は, Windows 2000 Server SP4 で、
template1,tblBooksは次のようになっています。
CREATE DATABASE template1
WITH OWNER = postgres
ENCODING = 'EUC_JP'
TABLESPACE = pg_default;
GRANT ALL ON DATABASE template1 TO postgres;
CREATE TABLE "tblBooks"
(
"ID" int4 NOT NULL,
"Book" text,
CONSTRAINT "key" PRIMARY KEY ("ID")
)
WITHOUT OIDS;
No.2ベストアンサー
- 回答日時:
テーブル名に大文字と小文字が混在しているせい
でしょうか。。。
"tblbooks" か "TBLBOOKS" にしたほうがよい
とは思います。
(SQL文としては、大文字小文字どちらか一方
に統一されていれば、
"tblbooks"でCREATEしたテーブルでも、
"TBLBOOKS"でSELECTできるはずです。)
検証したわけではないので、はずしているかもしれませ
んが、CREATE TABLE "tblbooks" で作ってみても、
再現するでしょうか?
copymasterさん、回答ありがとうございます。
お蔭で長い期間の悩みが解決しました!
ポイントを20点でなく、1000点上げたいです。
きのうまで、日本語版でなく別版を再インストールしようか、
いやいっそPostgreSQLから去ろうかとまで思っていましたので、
助かりました。
以下のようにして、copymasterさんの回答が正しいことを確認しました。
同じスキームに、最初に作成したテーブルtblBooksに加えて
最初のtblBooksと同じ2フィールドを持つ、tblbooks, TBLBOOKSを新規追加作成し、
データだけは各テーブルを区別できるように異なるものをセットしました。
この時点で、エラーとならずに、ちゃんと3テーブルが追加できたのにかなり吃驚しました。
いよいよここで、select * form tblbooks;を実行すると、
見事、tblbooksの全レコードが表示されました!
ついでに、select * form tblBbooks; とやってみたら、
質問したエラーがでなくなりましたが、
表示されたレコードはtblBbooksのものでなく、なんとtblbooksのものでした。
さらに、select * form TBLBOOKS; とやっても、tblbooksの全レコードを表示し、
TBLBOOKSのものは出力されませんでした。
あらためて、PostgreSQL7.4.2のDocumentationでSQLのところを調べてみました。
すると、私が以前読んだときに引いた赤鉛筆の下線付で下記の記述がありました
(実践しないでただ読んだだけではだめなんですね)。
SQL is case insensitive about key words and identifiers,
except when identifiers are double-quoted to preserve the case (not done above).
そこで、SELECT * FROM "tblBooks";として、テーブル名をダブルクオテーションで括って
実行しましたら、念願のtblBooksの全レコードが表示されました。
以上から、PostgreSQLはSQL文実行前にダブルクオテーションで括った部分以外を
すべて小文字に変換するということなんでしょうか。
初めてのWindows native の PostgreSQLなので、
私みたいにWindowsのプログラム習慣を持ち込む人は、
多分、わたしと同じエラーに遭遇するような気がします。
改めて、copymasterさんに感謝し、この質問を閉じます。
No.1
- 回答日時:
> この"relation does not exist"とは一体どんなエラーなんでしょうか?
該当するテーブル、この場合は"tblbooks"が無いということです。
該当のSQLにタイプミスなどはありませんでしょうか?
また、psql を使ってテーブル一覧を表示させたときにtblbooksは有りますか?
例 ---------------------------------------------------------
C:\>psql template1
template1=> \d
------------------------------------------------------------
http://www.postgresql.jp/document/pg802doc/html/ …
蛇足ですが、template1はデフォルトでは新規に作るデータベースの元に成るテンプレートデータベースですね。
http://www.postgresql.jp/document/pg802doc/html/ …
ここにテーブル等を追加すると、後から作るデータベースに自動的に作られてしまうので、通常のデータベースとして使うのは止めたほうが良いかと。
後でテーブル等を削除すれば良いだけの話では有りますが。
早速回答いただきありがとうございます。
テーブルが存在しないというエラーメッセージなんですね。
おかげでひとつ疑問が解決しました。
それから、当方PostgreSQL初心者ですのでtemplate1を
通常のデータベースにしてはいけないことも知りませんでした。
教えていただいたとおり、psqlを使ってみましたら、
エラー内容と違って、下記のとおり、そのテーブルを認識しています。
試しに、psqlでこのテーブルを使うSQLを実行すると、
またもや、relation "tblbooks" does not exist エラーがでます。
パスワード:
PostgreSQL の会話型ターミナル、psql 8.0.2 for windows へようこそ
template1=# \d
リレーションの一覧
スキーマ | 名前 | 型 | 所有者
----------+--------------+----------+----------
public | pg_logdir_ls | ビュー | postgres
public | tblBooks | テーブル | postgres
(2 行)
template1=# select * from tblBooks;
ERROR: relation "tblbooks" does not exist
template1=#
日本語版のpsql 8.0.2 for windows を使われている方で、
上記エラーが現れない方の回答もお待ちします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLでUPSERTを一度に複数行やる...
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
javaでデータベース上のテーブ...
-
2つのテーブルで引き算 postgres
-
Postgresのデータ領域の拡張に...
-
UPDATE文の更新順序について
-
単純なselectが遅くなるのです...
-
SQLにて指定日付より前、かつ最...
-
MS Access から PostgreSQL へ...
-
重複を許すキーの構文がわかり...
-
PostgreSQLの断片化の状況を確...
-
テーブルを作ろうとしたら。
-
テーブル名を*で検索できますか?
-
デットロック回避策(autocommit...
-
SQL、2つのテーブルで条件一致...
-
Accessでデータシートに同じデ...
-
「テーブルに座って……」という...
-
L2SWはARPテーブルを持っている?
-
テーブル名をカラムとして取得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
SQLでUPSERTを一度に複数行やる...
-
単純なselectが遅くなるのです...
-
SQLにて指定日付より前、かつ最...
-
PostgreSQLの断片化の状況を確...
-
Postgresqlのレポート機能について
-
2つのテーブルで引き算 postgres
-
テーブルを作ろうとしたら。
-
Postgresのデータ領域の拡張に...
-
javaでデータベース上のテーブ...
-
postgres FILLFACTOR 確認方法
-
テーブルにcsvファイルをインポ...
-
VIEWのCOPYってできないんですか?
-
トリガープロシージャのNEW変数...
-
MS Access から PostgreSQL へ...
-
同一カラムに複数条件指定
-
難しいSQL
-
レコードを1件のみ取得した後...
-
COPYコマンドによるTEXT取り込...
おすすめ情報