テーブル作成時にエラー?

このQ&Aのポイント
  • RedHatLinux9.0とPostgreSQL8.0.3の環境でテーブル作成時にエラーメッセージが表示されます。対処法を教えてください。
  • テーブル作成時に「NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'PK_SIKYO' for table 'TM_SIKYO'」というメッセージが表示され、テーブルを作成できません。
  • Windows版のPostgreSQLで作成したSQL文を利用してテーブルを作成しようとしていますが、プライマリーキーの設定が正しくできていないようです。対処法を教えてください。
回答を見る
  • ベストアンサー

テーブル作成時にエラー?

こんにちは。 以下のような環境で操作を行っています。 RedHatLinux9.0 PostgreSQL 8.0.3 テーブル作成時に次のようなメッセージが出力され、テーブルを作成することができません。 NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "PK_SIKYO" for table "TM_SIKYO" ちなみに実行したSQL文は次の通りです。 CREATE TABLE "TOUSHIN"."TM_SIKYO" ( "SHIKYO_CD" int4 NOT NULL DEFAULT nextval('"TOUSHIN"."TM_SIKYO_SHIKYO_CD_seq"'::text), "SHIKYO_NM" varchar(50), "SHIKYO_RNM" varchar(50), "SHOW_FLAG" bool, "UNUSE_FLAG" bool, "CREATE_DATE" timestamp DEFAULT ('now'::text)::timestamp(6) with time zone, "CREATE_ID" varchar(10), "CHANGE_DATE" timestamp DEFAULT ('now'::text)::timestamp(6) with time zone, "CHANGE_ID" varchar(10), CONSTRAINT "PK_SIKYO" PRIMARY KEY ("SHIKYO_CD") ) WITHOUT OIDS; SQL文はWindows版のPostgreSQLから作成したものを、そのままコピーして利用しました。 プライマリーキーが正しく設定できていないようなメッセージだと思うのですが、対処法など詳しいことが分からずに困っています。 Windows版から出力したSQL文なので、SQL文に間違いがありそうな感じでもないですし、一体何が原因なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • asahina02
  • ベストアンサー率47% (95/202)
回答No.6

> =# select * from "TOUSHIN"."TM_SIKYO"; > ERROR: schema "TOUSHIN" does not exist なぜでしょう・・・ > =# select * from pg_tables where tablename='TM_SIKYO'; > schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers ------------+-----------+------------+------------+------------+----------+------------- > TOUSHIN | TM_SIKYO | TOUSHIN | | t | f | f > (1 row) この結果から、スキーマ「TOUSHIN」は存在しているはずなので、もしかしたら「TM_SIKYO」のテーブルオーナーが「TOUSHIN」になっているのと現在のログインユーザーは誰か?あたりにヒントがあるかもしれませんね。 スーパーユーザーでと書かれていたので、普通はpostgresになるのかな?とは思ったのですが・・・ ・・・・このあたりで解決しないとちょっと私の分かる範疇を超えてきてしまってるな

omasu0147
質問者

お礼

スキーマの設定【CREATE SCHEMA "TOUSHIN" AUTHORIZATION "TOUSHIN";】をやり直したあとに、テーブル作成を行いましたらうまくいきました。 原因はおそらくなのですが、スキーマ設定を違うDBに接続した状態で行ったからではないかと思われます。 template1に接続して、createdbとcreateuserとcreatetablespaceを行った後にスキーマの設定までしてしまったからだと思います。 いろいろ勉強になりました。 ありがとうございました。

その他の回答 (5)

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.5

> =# select * from tm_sikyo; > ERROR: relation "tm_sikyo" does not exist select するときにちゃんとスキーマ指定しないとダメだと思います。 正しくは  select * from "TOUSHIN"."TM_SIKYO"  ※大文字小文字も判別されるかと・・ 他の部分については分かりません。スイマセン。 また、他の部分を知りたい場合、当初の質問と大分趣旨が変わってしまっているので、新しい質問にした方が、回答をもらえるかもしれません。

omasu0147
質問者

お礼

ありがとうございました。

omasu0147
質問者

補足

スキーマ指定をしてやってみたところ、 =# select * from "TOUSHIN"."TM_SIKYO"; ERROR: schema "TOUSHIN" does not exist と出てきてしまいます。TOUSHINスキーマがないようですが・・・ >また、他の部分を知りたい場合、当初の質問と大分趣旨が変わってしまっているので、新しい質問にした方が、回答をもらえるかもしれません。 趣旨が変わってきてしまってすいません。 これらのことは違うときに調べたり質問してみるなどしてみます。

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.4

詳しくは分からないですが、「\z」の場合、publicスキーマのテーブルしか表示しないようです。 今回のテーブルは「TOUSHIN」スキーマに作成されている為、表示されていないと思われます。 試しに対象テーブルにSELECT等してみてください。 > 例えば、DB保守担当者の「admin」とした場合、ユーザをadminに切り替えて> createdbなどのコマンドを実行しようと思うとできなかったのですが、これ> が関係しているなんてことはあるのでしょうか? これは createuser admin っていうコマンドで行ってますよね? その際に英語に2回ほど質問(y/n)があったと思いますが、その際の回答でDB作成権限無しとしたからだと思います。

omasu0147
質問者

お礼

ありがとうございました。

omasu0147
質問者

補足

ありがとうございます。 select文を実行してみましたところ、次のような結果になりました。 =# select * from tm_sikyo; ERROR: relation "tm_sikyo" does not exist すいません。テーブルはできできていたみたいです。 =# select * from pg_tables where tablename='TM_SIKYO'; schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers ------------+-----------+------------+------------+------------+----------+------------- TOUSHIN | TM_SIKYO | TOUSHIN | | t | f | f (1 row) ただ、こちらでは表示されるのですが、\dで表示されないのはなぜでしょう? PostgreSQL(データベース)の基本的なことかもしれませんが・・・ >これは createuser admin っていうコマンドで行ってますよね? >その際に英語に2回ほど質問(y/n)があったと思いますが、その際の回答でDB作成権限無しとしたからだと思います。 えっと作成権限は与えてあります。 linux側にも「admin」というユーザを登録して、このユーザに切り替えてからcreatedbなどのコマンドが実行できませんでした。 権限設定でどこか間違っているのだと思うのですが・・・

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.3

> NOTICE: CREATE TABLE will create implicit sequence "TM_SIKYO_SHIKYO_CD_seq" for serial column "TM_SIKYO.SHIKYO_CD" > NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "TM_SIKYO_pkey" for table "TM_SIKYO" > CREATE TABLE これってもしかしてテーブル作られてませんか?(3行目) 単に作った後の、テーブル存在確認の方法が間違っているってことはないでしょうか? 参考URLでは同じメッセージで出来ているような感じなのですが。 ちなみに権限確認についても参考URLで。

参考URL:
http://www.dolphy.gr.jp/webap/env/postgresql-install-fc3.html
omasu0147
質問者

お礼

ありがとうございました。

omasu0147
質問者

補足

ありがとうございます。 確認してみたのですが、できていないみたいです。 # \z Access privileges for database "toushin_db" Schema | Name | Type | Access privileges --------+------+------+------------------- (0 rows) # \d No relations found. 参考URLを見ていろいろと行ってみたのですが、やはりうまくいきません。 ちょっと気になったのですが、 例えば、DB保守担当者の「admin」とした場合、ユーザをadminに切り替えてcreatedbなどのコマンドを実行しようと思うとできなかったのですが、これが関係しているなんてことはあるのでしょうか?

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.2

自分の環境(サーバー不明:PostgreSQL 8.0.3)では最初のSQL文でもうまくいきました。 (最初から自分の環境も試せばよかったですね・・m(_ _)m) もしかしてsequence、indexの作成権限がないなんてことは??

omasu0147
質問者

お礼

ありがとうございました。

omasu0147
質問者

補足

PostgreSQLのスーパユーザで作業を行っているので大丈夫だと思うのですが・・・ ちなみに権限を確認する方法ってどうすればよいのでしょうか? 基本的なことですいません。

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.1

プライマリキーとして設定しているSHIKYO_CDのキーが2重に作成されようとしているからではないでしょうかね? 同じような状況に合ったことないので、これで解決するか分かりませんが、 "SHIKYO_CD" int4 NOT NULL DEFAULT nextval('"TOUSHIN"."TM_SIKYO_SHIKYO_CD_seq"'::text),  を "SHIKYO_CD" serial PRIMARY KEY, に変えて、 ,CONSTRAINT "PK_SIKYO" PRIMARY KEY ("SHIKYO_CD") を削除してみてはいかがでしょう? これでほぼ同じ意味のCREATE文になると思うのですが。 ※SHIKYO_CD_pkeyというシーケンスが勝手に作成されます。  ↑名称はちょっとうろ覚え・・・

omasu0147
質問者

お礼

ありがとうございました。

omasu0147
質問者

補足

ありがとうございます。 早速ですが、以下のSQL文を実行してみたところ、次のようなエラーが帰ってきました。 「SQL文」 CREATE TABLE "TOUSHIN"."TM_SIKYO" ( "SHIKYO_CD" serial PRIMARY KEY, "SHIKYO_NM" varchar(50), "SHIKYO_RNM" varchar(50), "SHOW_FLAG" bool, "UNUSE_FLAG" bool, "CREATE_DATE" timestamp DEFAULT ('now'::text)::timestamp(6) with time zone, "CREATE_ID" varchar(10), "CHANGE_DATE" timestamp DEFAULT ('now'::text)::timestamp(6) with time zone, "CHANGE_ID" varchar(10) ) WITHOUT OIDS; 「結果」 NOTICE: CREATE TABLE will create implicit sequence "TM_SIKYO_SHIKYO_CD_seq" for serial column "TM_SIKYO.SHIKYO_CD" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "TM_SIKYO_pkey" for table "TM_SIKYO" CREATE TABLE テーブルは作成されていませんでした。 先ほどと違うエラーが1つ出ているようですが・・・ 何が原因なのでしょうか?

関連するQ&A

  • PostgreSQLのテーブル構造を取得したい

    現在PostgreSQLとPHP5を利用してアプリケーションを開発しております。 PHPにて現在すでに存在するPostgreSQLのテーブルの定義情報を取得するにはどうすればよろしいでしょうか。テーブルの定義情報は下記のようにSQLのCREATE文で取得したいと思っております。 CREATE TABLE favorite ( code serial NOT NULL, reg_date timestamp without time zone NOT NULL DEFAULT now(), update_date timestamp without time zone, title text, url text, u_id character varying(20) NOT NULL, enabled_flag smallint NOT NULL DEFAULT 1, CONSTRAINT web_favorite_pkey PRIMARY KEY (fv_code) ) 何卒よろしくお願いいたします。

  • テーブルが作成できない

    CREATE TABLE media ( id INT DEFAULT 0 primary key, media_name VARCHAR DEFAULT '', others text DEFAULT '', regis_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_date TIMESTAMP ); をMySQL 5.0.77で実行したところ ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' regis_date TIMESTAMP, update_date )' at line 3 のエラーが出てきてしまいます しかしMySQLを使い始めたばかりで今一理解が出来ず また、 text DEFAULT '' を使った他のテーブルは作成できています どこがおかしいのか教えていただけませんでしょうか、お願いします

    • ベストアンサー
    • MySQL
  • SQL文を入力したらエラー

     phpMyAdminでSQLに  以下の文を入力しました。  CREATE DATABASE xmas; USE xmas; CREATE TABLE xmastran ( book_id int not null auto_increment, name varchar(30) not null default ' ' , org varchar(50) not null default ' ', addr varchar(80) not null default' ', tel varchar(20) default ' ', mail varchar(40) default ' ', course varchar(30) default ' ', nums integer default 0, PRIMARY KEY (book_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;  以上SQLに入力した文ですが!  以下のエラーが出て先に進みません。   エラー 実行した SQL: CREATE DATABASE xmas; → (http://dev.mysql.com/doc/refman/5.5/en/create-database.htmlにリンクされている) MySQL のメッセージ: ドキュメント #1007 - Can't create database 'xmas'; database exists サーバ "127.0.0.1" 上でクエリを実行する: CREATE DATABASE xmas; USE xmas; CREATE TABLE xmastran ( book_id int not null auto_increment, name varchar(30) not null default ' ' , org varchar(50) not null default ' ', addr varchar(80) not null default' ', tel varchar(20) default ' ', mail varchar(40) default ' ', course varchar(30) default ' ', nums integer default 0, PRIMARY KEY (book_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;   以上ですが、何が原因で進めないか原因を追及中です。  最近SQLを始めたので、全く見当がつきません。 皆様よろしくお願いします。  

    • ベストアンサー
    • MySQL
  • ダイレクトインサートでテーブル作成時カラム長を指定

    oracle10g standard 下記のようなsqlでviewをtable化するとvarchar2のカラム長が固定で4000になります。 長さを指定することはできますか? create table test as select * from view;

  • phpmyadminでのテーブル作成

    phpmyadminでテーブルを作成しようとするとエラーが発生します。 <実行されたSQLクエリ> CREATE TABLE `個人情報` ( `氏名` VARCHAR( 30 ) NOT NULL , PRIMARY KEY ( `氏名` ) ) <mysqlのメッセージ> #1 - Can't create/write to file '.\住所録\個人情報.frm' (Errcode: 2) どうやらファイルを作成できないと言われているみたいです。 いろいろ試してみましたがよくわかりません。 初歩の初歩ですいませんがご解答お願いします。

    • ベストアンサー
    • MySQL
  • テーブル作成時に1289エラーが出る。

    テーブル作成時に、ERROR 1289 (HY000): The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working というエラーが出てしまいます。 どういった原因が考えられるでしょうか? Mysql5.0.15を使っています。 CREATE文 CREATE TABLE USER ( ID BIGINT NOT NULL AUTO_INCREMENT ,NAME VARCHAR(30) ,PRIMARY KEY (ID) ) type=InnoDB;

  • エラーになってしまうCREATE文

    MySQL 5.0.21(Win版)を導入してみたのですが、 http://hotwired.goo.ne.jp/webmonkey/2000/01/index2a_page5.html にある下記のSQL文を「MySQL Command Line Client」から実行すると CREATE TABLE employees ( id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMENT, first varchar(20), last varchar(20), address varchar(255), position varchar(50), PRIMARY KEY (id), UNIQUE id (id)); を実行すると、 mysql> CREATE TABLE employees ( id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMEN T, first varchar(20), last varchar(20), address varchar(255), position varchar(5 0), PRIMARY KEY (id), UNIQUE id (id)); ERROR 1067 (42000): Invalid default value for 'id' mysql> とエラーになってしまいます。なぜでしょうか?

    • ベストアンサー
    • MySQL
  • phpMyAdmin を使って以下のSQL文を記載してテープルの追加を

    phpMyAdmin を使って以下のSQL文を記載してテープルの追加をしたいのですが エラーがでます。 phpMyAdminの操作方法やSQLの知識も乏しいので EC-CUBEのテキストに従って操作しているのですが、、、、。 ------- ここから ---------- CREATE TABLE dtb_contact ( contact_id serial NOT NULL, name text, name_f text, zip01 text, zip02 text, pref integer, addr01 text, tel01 text, tel02 text, tel03 text, email text, message text, create_date timestamp without time zone, del_flg integer DEFAULT 0, customer_id integer, status integer DEFAULT 0 ); ALTER TABLE ONLY dtb_contact ADD CONSTRAINT dtb_contac_contact_id_key UNIQUE (contact_id); -----ここまで------------- 実行すると下記のようなエラーがでます ▼MySQLのメッセージ: ドキュメント #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'without time zone, del_flg integer DEFAULT 0, customer_id in MySQL の バージョンは MySQL 5.0.45なのですが 文法的にどこか間違っているのでしょうか? ご多忙のところ恐縮ですが ご教授いただければ幸いでございます。

    • ベストアンサー
    • MySQL
  • テーブル作成時のエラーについて(Mysql 5.1.30)

    SQLを勉強始めたばかりの超初心者です。 先日勉強のため、Mysql ver.5.1.30をDLしてインストールしました。 名簿テーブルを作成しようとMySQL Command Line Clientから以下のコマンドを入力しました。 mysql> create table 名簿( -> 姓 varchar(12), -> 名 varchar(12), -> 生年月日 date); 実行すると以下のエラーが表示されます。 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '名簿( 姓 varchar(12), 名 varchar(12), 生年月日 date)' at line 1 これは何が間違っているのでしょうか? テキストどおりに入力しているのですが、テーブルが作成できないため次に進めません。 周りに詳しいものもいないため困っています。 ぜひご教授よろしくお願いします。

    • ベストアンサー
    • MySQL
  • phpMyAdminのSQLで、SQL文を登録が

     phpMyAdminのSQLで SQL文を登録するため、以下のエラーメッセージの中にあるCREATE DATABASE xmas;で始まる  SQL文を実行したところ、以下のエラーメッセージがでて、登録でできずに困っています。  どうしたら登録できますか!?    宜しくお願いします。    エラー 実行した SQL: CREATE DATABASE xmas; MySQL のメッセージ: ドキュメント #1007 - Can't create database 'xmas'; database exists サーバ "127.0.0.1" 上でクエリを実行する: ドキュメント CREATE DATABASE xmas; USE xmas; CREATE TABLE xmastran ( book_id int not null auto_increment, name varchar(30) not null default '' , org varchar(50) not null default '', addr varchar(80) not null default'', tel verchar(20 default '', mail varchar(40) default '', course varchar(30) default '', nums integer default 0, PRIMARY KEP (book_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    • ベストアンサー
    • MySQL