
エラーの詳細は以下のとおりです。
まず、ダウンロード後解凍した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で質問しましょう!
似たような質問が見つかりました
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL MYSQL エラー 2 2022/10/18 11:37
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL php テーブルを作れない 2 2022/11/17 18:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数テーブルからの表示データ...
-
PL/pgSQLの使い方
-
PostgresSQL-7.1.2におけるgran...
-
XREAサーバでテーブル作成方法
-
Access
-
「テーブルに座って……」という...
-
クエリの質問
-
ロリポップでDB・・・どうす...
-
2文字以上の重なっている文字列...
-
phpMyAdminでページが表示できない
-
男性と2人で飲食店に行きテーブ...
-
“There is a fish. ”はおかし...
-
複数のテーブル結合と件数の表示
-
リレーショナル・データベース...
-
人数サマリの方法について
-
VBから
-
お金持ちのテーブル
-
inner joinでサブクエリ
-
MySQLのテーブル連結でクエリに...
-
外付けHDDが反応しなくなりました…
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
SQLでUPSERTを一度に複数行やる...
-
SQLにて指定日付より前、かつ最...
-
単純なselectが遅くなるのです...
-
PostgreSQLの断片化の状況を確...
-
2つのテーブルで引き算 postgres
-
MS Access から PostgreSQL へ...
-
最新レコードを抽出し外部結合...
-
javaでデータベース上のテーブ...
-
Postgresqlのレポート機能について
-
デットロック回避策(autocommit...
-
PostgreSQL レコードからアイテ...
-
Postgresのデータ領域の拡張に...
-
重複を許すキーの構文がわかり...
-
PostgreSQLのリンクテーブル?...
-
異なるデータベースでのINSERT...
-
テーブルを作ろうとしたら。
-
同一カラムに複数条件指定
-
テーブルにcsvファイルをインポ...
おすすめ情報