質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.69%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

62336閲覧

postgreSQLで「リレーションが存在しません」を乗り越える

Maeterlinck

総合スコア13

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/05/02 07:25

編集2019/05/02 07:40

postgreSQLを学び始めたものです。

ERROR: relation "item" does not exist

PostgreSQLで上のような表示が出てしまい、リレーションitemが存在しないと認識されている状態です。

他の質問や、他のサイトを参照する限り、テーブル名は小文字にしたほうがいいということですが、もともとテーブル名はitemという小文字です。

また、SET search_path TO スキーマ名;
でスキーマ名をpublic一択にし、
SHOW schema_path;で現在のスキーマがpublic のみになっていることも確認しました。

にも関わらず、sample=# select * from public.item;
とスキーマ修飾子付きで入力しても、
ERROR: relation "public.item" does not exist
LINE 1: select * from public.item;
^
と表示されるばかりです。

どうしたら良いでしょうか。
今日いちにち悩んでおり、ぜひ経験豊かな方々のアドバイスをいただきたく思います。

itemテーブルの構造は、sample_pg_sjis.sqlで以下のように指定しています。
また、postgreSQLの表示の画面も追加します。

postgreSQL

1 2CREATE TABLE item 3( 4 code SERIAL PRIMARY KEY, 5 category_code INTEGER , 6 name TEXT, 7 price INTEGER, 8 level INTEGER, 9 popularity INTEGER, 10 image TEXT 11 information TEXT, 12); 13 14INSERT INTO item(category_code, name, price, level, popularity, image, information) VALUES(1, 'スッキリわかるJava入門 第2版', 2808, 1, 3, 'スッキリわかるJava入門 第2版.jpg', 'プログラミング学習のネックとなる「開発環境の準備」と「多発するエラーへの対応」には、ブラウザ上でコーディング、コンパイル、実行ができる仮想開発環境「dokojava」を読者特典として用意し、エラーによく効く「虎の巻」を巻末付録として用意しました。本書でぜひ、Javaプロフェッショナルへの第一歩を踏みだしてください! '); 15INSERT INTO item(category_code, name, price, level, popularity, image, information) VALUES(1, 'やさしいJava 第7版', 2786, 1, 2, 'やさしいJava.jpg', '文法の基礎からクラス、オブジェクト指向まで、しっかりと理解できる構成で、無理なく読み進められる書籍です。わかりやすく、読みやすい解説と、動かして理解できる多数のサンプルプログラムで、大切な基本がきちんと身につきます。最新のJava環境であるJava 11に対応し、OpenJDKを使った環境構築も紹介しています。'); 16INSERT INTO item(category_code, name, price, level, popularity, image, information) VALUES(1, 'Javaの教科書', 2160, 2, 2, 'Javaの教科書.jpg', '「Java」は、スタンドアロンやネットワーククライアント環境をはじめ、サーバサイド、あるいはモバイル環境にいたるまでのアプリケーションの開発に利用されるようになりました。本書は、これら開発のすべてに共通して必要な、プログラムの制御構造とアルゴリズムを学びながらJava言語の文法を習得する流れになっています。'); 17 18 19コード

postgreSQL

1postgres=# \i ~/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql 2DROP DATABASE 3psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:2: ERROR: current user cannot be dropped 4psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:3: ERROR: role "postgres" already exists 5CREATE DATABASE 6You are now connected to database "sample" as user "postgres". 7psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:7: NOTICE: table "item" does not exist, skipping 8DROP TABLE 9psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:19: ERROR: syntax error at or near "information" 10LINE 10: information TEXT, 11 ^ 12psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:21: ERROR: relation "item" does not exist 13LINE 1: INSERT INTO item(category_code, name, price, level, populari... 14 ^ 15psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:22: ERROR: relation "item" does not exist 16LINE 1: INSERT INTO item(category_code, name, price, level, populari... 17 ^ 18psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:23: ERROR: relation "item" does not exist 19LINE 1: INSERT INTO item(category_code, name, price, level, populari... 20 ^ 21psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:27: ERROR: relation "item" does not exist 22LINE 1: INSERT INTO item(category_code, name, price, level, populari... 23 ^ 24psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:28: ERROR: relation "item" does not exist 25LINE 1: INSERT INTO item(category_code, name, price, level, populari... 26 ^ 27psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:29: ERROR: relation "item" does not exist 28LINE 1: INSERT INTO item(category_code, name, price, level, populari... 29 ^ 30psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:32: ERROR: relation "item" does not exist 31LINE 1: INSERT INTO item(category_code, name, price, level, populari... 32 ^ 33psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:33: ERROR: relation "item" does not exist 34LINE 1: INSERT INTO item(category_code, name, price, level, populari... 35 ^ 36psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:34: ERROR: relation "item" does not exist 37LINE 1: INSERT INTO item(category_code, name, price, level, populari... 38 ^ 39psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:42: NOTICE: table "category" does not exist, skipping 40DROP TABLE 41CREATE TABLE 42INSERT 0 1 43INSERT 0 1 44INSERT 0 1 45psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:60: NOTICE: table "customer" does not exist, skipping 46DROP TABLE 47CREATE TABLE 48psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:74: NOTICE: table "ordered" does not exist, skipping 49DROP TABLE 50CREATE TABLE 51psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:88: NOTICE: table "ordered_detail" does not exist, skipping 52DROP TABLE 53CREATE TABLE 54GRANT 55psql:/Users/taishi/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql:101: ERROR: relation "item" does not exist 56ALTER TABLE 57ALTER TABLE 58ALTER TABLE 59ALTER TABLE 60 61コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

退会済みユーザー

退会済みユーザー

2019/05/02 07:33 編集

そのデータベースがどんな構造なのか、テーブルはどんなのがあるかわからないから、誰も回答できないっていう。第三者にもわかるように説明を質問本文中に付け加えてほしい。例えばpgAdmin4の画面とか掲載できませんか。
Maeterlinck

2019/05/02 07:37

itemテーブルの情報を追記しました。 他に情報が必要であれば教えていただけると幸いです。 よろしくお願い申し上げます。
Maeterlinck

2019/05/02 07:40

pgAdmin4の画面を追記しました。

回答3

2

itemテーブルがどのスキマーで作成されているか確認して下さい。
pgAdmin4を使用されているとの事なので、GUIで簡単に確認できます。
多分create tableを実行したユーザーのスキーマに作られていると思います。

createでテーブルにスキーマ修飾を付けると、ログインユーザーに左右されません。
※スキーマに対する権限は必要です。

SQL

1CREATE TABLE public.item(...

投稿2019/05/02 11:13

sazi

総合スコア24870

Maeterlinck👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

Maeterlinck

2019/05/02 11:17

ご回答ありがとうございます。 itemテーブルがどのスキマーで作成されているか確認して下さい。とのことですが、 よろしければそのコマンドを教えていてだければ幸いです。 よろしくお願いします。
sazi

2019/05/02 11:22 編集

pgAdmin4ならコマンドでなくとも、GUIで操作できます。 左側にツリーがありますので、それを展開してみて下さい。 SQLで行うならpg_classなどのシステムカタログを参照する事になります。 psqlなら\d テーブル名
Maeterlinck

2019/05/02 11:29

ごめんなさい、左側のツリーというのは、どういった画面状態のことなのでしょうか。 私は今eclipseとMacのターミナルを使って開発を進めていますが、 pgAdmin4の画面に行きたくても、象のアイコンをダブルクリックしても何も立ち上がらないのです。
Maeterlinck

2019/05/02 12:03

postgres=# \d item と入力すると Did not find any relation named "item". このようになります。 item というテーブルが認識されていないのでしょうか。
sazi

2019/05/02 12:06

コメント変更しましたので、上記のリンク先の内容で確認してみて下さい。
Maeterlinck

2019/05/02 12:52

なんどもなんども申し訳ありません。 いただいたリンク、確認してみました。 itemテーブルをコマンド上から作成し、ユーザーにグラントさせることはできました。 ただ、このitemテーブルは一度ファイルを実行してしまうと消えてしまうようです。 どうすれば保存されるのか、教えていただけると幸いです。
sazi

2019/05/02 13:12

一連のコマンドを実行した後に、 commit; してみて下さい。
Maeterlinck

2019/05/02 14:51

お返事ありがとうございます。 commit; してみました。 それでも sample=> \i ~/eclipse-workspace/Book/WebContent/sample_pg_sjis.sql してファイル実行すると relation "item" does not exist になります。 ファイル実行すると消えてしまうのでしょうか。 どのようにすればitemテーブルの存在を認めさせ、データを反映させることができるのでしょう。 なんどもお聞きしてすみません。 どうかよろしくお願いします。
sazi

2019/05/02 15:16 編集

ファイル実行した結果はエラーが出ていないのですか? 質問の内容と同じようでしたら、エラーが発生していますので失敗していることになります。 sample_pg_sjis.sql の内容もすべて質問に追加してもらえますか?
Maeterlinck

2019/05/02 15:18

お返事ありがとうございます。 明日の朝、質問に追加させていただきます。 今日はお休みなさい。

1

ベストアンサー

CREATE TABLE item
(
code SERIAL PRIMARY KEY,
category_code INTEGER ,
name TEXT,
price INTEGER,
level INTEGER,
popularity INTEGER,
image TEXT -- , が足りない
information TEXT, -- , が余計
);

って話かも?

投稿2019/05/02 20:31

Orlofsky

総合スコア16375

Maeterlinck👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

Maeterlinck

2019/05/03 00:34

ありがとうございます! コンマを正しくしたら、item テーブルが認識されたようです。 教えていただき、ありがとうございました。

1

テーブルを作ったときのPostgreSQL接続ユーザーと、
エラーメッセージを表示しているときの接続ユーザーが異なるとか、
権限が足りないとかじゃないかなと。

9.6のドキュメントで申し訳ないけど、
第21章 データベースロール
5.6. 権限
あたりの情報を確認して、
接続ユーザーがどこまでできる権限を持っているのかを確認したらよいかと。

投稿2019/05/02 07:46

退会済みユーザー

退会済みユーザー

総合スコア0

Maeterlinck👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

Maeterlinck

2019/05/02 07:58

権限を確認するため、 sample=# SHOW GRANTS for postgres と入力しても反応なく、スルーされてしまいました・・・。
Maeterlinck

2019/05/02 08:00

確認できないうちは 権限を付与する GRANT 権限 ON 対象 TO 誰に コマンドをしないほうがいいと思うのですが。。。
退会済みユーザー

退会済みユーザー

2019/05/02 08:03

sampleユーザーが権限低いから、create/drop databaseとかcreate/drop tableとか悉く無視されてるんだと思うよ。 その手の操作をするときはpostgresユーザーで接続し直さないと。
Maeterlinck

2019/05/02 08:12

お返事ありがとうございます。 いったん外に出て、psql -Uコマンドでもう一度接続しました。 この状態で GRANT all ON item(テーブル名) TO postgres(ユーザー名) すべきでしょうか?
退会済みユーザー

退会済みユーザー

2019/05/02 08:16

postgresユーザーは最強だから権限をいじろうとしちゃいけない。 自分(ら)で作ったユーザーにたいして行うべき。
Maeterlinck

2019/05/02 08:17

他にユーザーを作らないといけないということですか!?
Maeterlinck

2019/05/02 08:20

でもなぜ最強のpostgresユーザーで蹴られたのでしょう。 sampleはデータベース名であって、ユーザー名ではないのです。
退会済みユーザー

退会済みユーザー

2019/05/02 08:23

自己防衛的に、最強ユーザーpostgresでもし万が一外部からSQLインジェクションなどで望まないクエリーを打ち込まれてデータベースを壊したりしないよう、システム開発する上ではデータベースを作る・壊す、ユーザーと作る・壊す、ユーザーに権限を与える、くらいの仕事だけさせるべきで、作成したデータベースの管理は別途そのデータベースにのみ特化した管理ユーザーを設けつつ、開発アプリケーションからアクセスするときはcreate/drop/grantなどにアクセスできない、権限を抑えたユーザーを使うものです。
Maeterlinck

2019/05/02 08:31

ありがとうございます。 CREATE ROLE taishi WITH LOGIN PASSWORD 'taishi1985'; 上記のコマンドで自分の下の名前でユーザー(ロール)を一つ作りました。 その後、postgresユーザーから権限を付与するのですか。 具体的にアドバイスいただけたら幸いです。 どうかよろしくお願いします。
Maeterlinck

2019/05/02 08:43

postgres=# Grant all on item to taishi; ERROR: relation "item" does not exist となってしまい、やはりitemテーブルが存在していないと言われるんです。 どうしたらよろしいでしょうか。
Maeterlinck

2019/05/02 10:49

色々リンクを送っていただき、ありがとうございます。 どちらも読ませていただきましたが、テーブルが存在しない、という事態の解決法については載っていないと思うのですが。。。 他にも自分で色々調べてみたが、わからず、どうかもう一度ご回答いただければ幸いです。 よろしくお願いします。
Maeterlinck

2019/05/02 10:55

itemの他のテーブルはGRANTを与えることができるのに、item だけは存在しない、と言われてしまいます。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.69%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

同じタグがついた質問を見る

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。