• 締切済み

Postgresのことで・・・

質問があります。 test_tbl----------- name varchar(64) number int4 position int4 ------------------- というテーブルがあるとします。 そこにデータを格納したファイルがあります。 データファイル(test.txt)------- '山田',2001,4 '神田',1999,3 '星野',2000,2 '東',2003,1 '鳥越',1999,13(100レコード程あり) ------------------------------ このファイルのデータをtest_tblに格納したいのですがどのようにすればいいのでしょうか? ちなみにデータファイルの形式はtxtでもcsvでも なんでもかまいません。 意味的には insert into test_tbl (name,number,position) values < test.txt とかしたいんですが・・・ 可能でしょうか? ご迷惑をおかけしますが、宜しくお願いいたします。 m(_ _)m -------------------------------

みんなの回答

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

すでに解答が出ていますがちょっと補足すると、 1.改行コードに気をつける。 最初私はこれではまりました。 2.空のカラムがある場合は、 with null as '' を追加する。 以前これで数日はまった記憶があります(^^;

  • ssm3u
  • ベストアンサー率52% (19/36)
回答No.1

PSQLコマンドであれば、 COPY test_tbl FROM 'test.txt' USING DELIMITER ','; のように COPYコマンドを使います。 が、文字列の '' は取って置いたほうが良いかもしれません。

参考URL:
http://www.postgresql.jp/document/pg732doc/reference/sql-copy.html

関連するQ&A

  • Postgresのことで・・・

    質問があります。 --test_tbl---------------------- id : integer uid : varchar(32) name : varchar(64) day :date -------------------------------- という上記のテーブルがあるとします。 このテーブルのnameフィールドを varchar(64)からvarchar(120)に変更したいのですが どのようにすればいいでしょうか? Postgresのヴァージョンは7.3.2です。 宜しくお願いいたします。

  • テーブル自体のバックアップ

    教えてください。 今オラクルのDBにTEST1テーブルが存在するとします。 ------TEST1--------------------- id varchar(5) Primary Key name varchar(20) old int -------------------------------- 今このテーブルとまったく同じデータを持ち、同じ構成のテーブルTEST2を 作成したいと考えています。 (1)create table TEST2( id varchar(5) primary key, name varchar(20), old int ); (2)insert into TEST2( id, name, old) values (select id, name, old from TEST1); としてTEST2テーブルを作成して、TEST1のデータを格納していますが、 他の方法はないでしょうか? たとえばこんなコマンドはありませんが、 COPY TEST1 TEST2 とか、 オラクルマネージャみたいなもので、 コピペして、名前をTEST2にする とかなんでもいいです。 TEST1のバックアップをとりたいのですが・・・・ すみません、わかりづらい説明で。 宜しくお願い致しますm(_ _)m

  • Timestampの値を自動的に挿入することは可能でしょうか

    Oracle10gを使用してテーブルを作るところなのですが、タイムスタンプをOracle側で自動的に挿入することは可能でしょうか? つまり CREATE TABLE TEST ( ID NUMBER PRIMARY KEY, NAME VARCHAR(10), ENTRY TIMESTAMP ); というテーブルを作成した場合、データをinsertする際にOracleが勝手にその瞬間の時間を格納するようにしたいです。 insert into test values (1, 'taro'); とすると1, 'taro', 現在時刻がデータベースに格納される。。 初心者ですみませんがご存知の方いらっしゃいましたらご教示下さい。 宜しくお願いします。

  • CLOB型へのINSERT

    いつも参考にさせて頂いています。 まず、問題はCLOB型に4000Byte以上のデータを 格納出来なくて困っております。 環境は下記のとおりです。 OS:Windows2003 Oracleバージョン:9.0.1.4.0 テストした手順は (1)テーブル作成 create table TEST_TBL ( id number(9), data clob ); (2)INSERT insert into TEST_TBL values(1,'4000Byte以上のデータ'); ORA-01704: 文字列リテラルが長すぎます CLOBは4Gまで入るはずなのになぜなんでしょうか? ご回答よろしくお願いいたします。

  • フィールドをデフォルト0にする

    フィールドをデフォルト0にする方法が知りたいです。 以下のようなサンプルがります。 drop table test_a; create table test_a ( name varchar2(10), a number(1), b number(1), c number(1) ) insert into test_a (name) values ('AAA'); insert into test_a (name,a) values ('BBB', NULL); insert into test_a (name,a,b) values ('CCC', NULL,NULL); select * from test_a; この状態では、a,b,cはNULLですが、a,b,cの値をデフォルト値で0にしたい為、 update test_a set a = 0, b = 0, c = 0; として、データを直して、次回から insert into test_a (name) values ('DDD'); とすると、nameがDDDの時もa,b,cが0となるようにテーブル定義を変えたいのですが 既存のテーブルをそのままで、途中から変更する方法が知りたいです。

  • 関数の戻り値について

    ----test.c----------------- id="0001"; number = get_data(id); /* 関数の戻り値を取得したい */ if(strcmp(number, "01") == 0){ /* Aの処理へ */ }else{ /* Bの処理へ */ } ----test.pc---------------- int get_data(char* id){ EXEC SQL BEGIN DECLARE SECTION; VARCHAR tel_no[3]; VARCHAR id_no[5]; EXEC SQL END DECLARE SECTION; strcpy(id_no.arr,id); id_no.len=strlen(id_no.arr); EXEC SQL SELECT tel_number into :tel_no FROM test_tbl WHERE id=:id_no; tel_no.arr[tel_no.len]='\0'; /*取得したtel_noを返したい!!*/ } --------------------------- test.cで引数に"0001"を指定して、get_data関数を コールして、そのget_data関数で受け取った引数で test_tblを検索しtel_numberフィールドの値を test.cに返し、判断文で処理したいと考えています。 ちなみにtest_tblで引数の条件で合致するデータは 必ず1件のみとします。 どのように記述したらいいかわかりません。 アドバイスお願い致します。m(_ _)m

  • Primary Key について

    PostgreSQLのPrimary Keyについて質問があります。 ---------------------------------- create table test_db ( id int8, name varchar(32), day date, constraint PK primary key( id, name)); ---------------------------------- 上記のようにtest_dbを作成しました。 データをinsertする際、 id:[1] name:[watanabe] day:[2003-05-29] id:[2] name:[watanabe] day:[2003-05-29] とするとデータが格納されてしまいます。 idとnameの両方が一致したデータは格納できないと 思うのですが、 id, name各々test_db内に対して一意なデータとして 扱いたいのですがどのようにすればいいでしょうか? [例] id:[1] name:[watanabe] day:[2003-05-29](格納済) (name:watanabeは存在するためエラー) id:[2] name:[watanabe] day:[2003-05-29] (id:1は存在するためエラー) id:[1] name:[simada] day:[2003-05-29] (正常格納) id:[2] name:[simada] day:[2003-05-29] --------------------------------------- わかりづらくて申し訳ありませんが、 宜しくお願いいたします。

  • c言語 

    データを構造体の配列に格納したいのですが、このやり方ではできませんでした。どうすればいいですか? (ファイル内のデータを読み込んで格納しようとしています。) typedef struct dataset{ int price; char id; char name; }data; int main(void) { FILE *f = fopen("input.txt","r"); FILE *output = fopen("output.txt","w"); char order[100]; char name[100]; char id[100]; int price; int num = 0; while(fscanf(f,"%s",order) != EOF){ fscanf(f,"%s%s%d",product->name[num],product->id,&product[num].price); num++; } } return 0; } input.txt CD Kenji 300 DVD Nanako 350 PC Koki 1000 ........

  • 別々のテーブルで共通のid使う

    一つのページから別々のテーブルにデータをINSERTしたいのですが、"id"と"number"は同じ値でそれぞれのテーブルにいれたいのですが、どうやってやるのでしょうか? 下のPHPのコード(一部)でデータを流してみたのですが、このままやると、もしデータに不具合があって片方だけ登録されないことがあると、一方は登録されて、一方は登録されないという事態が発生してしまい、"id"が違う番号で登録されてしまう可能性があります。 id int(8) NOT NULL AUTO_INCREMENT で"id"は作りました! $insertSQL1 = sprintf("INSERT INTO tbl1 (id, number, name, price) VALUES (%s, %s, %s, %s)", GetSQLValueString($_POST['id'], "int"), GetSQLValueString($_POST['number'], "text"), GetSQLValueString($_POST['name'], "text"), GetSQLValueString($_POST['price'], "int")); $insertSQL2 = sprintf("INSERT INTO tbl2 (id, number, ename, eprice, extra) VALUES (%s, %s, %s, %s, %s)", GetSQLValueString($_POST['id'], "int"), GetSQLValueString($_POST['number'], "text"), GetSQLValueString($_POST['ename'], "text"), GetSQLValueString($_POST['eprice'], "int"), GetSQLValueString($_POST['extra'], "text")); 別々のテーブルで共通のidを使う方法はないでしょうか? phpMyAdminのSQLを使ってます。 回答よろしくおねがいします!

    • ベストアンサー
    • MySQL
  • phpからquery実行

    趣味でサーバー構築を楽しんでいます phpからqueryでデータを渡そうとしたところ詰まってしまい、どうにも分からないので質問します //MSSQLQuery// DECLARE @acct varchar(32); SET @acct = 'testname'; INSERT INTO test.dbo.tblInfoA (Number,ID,) SELECT Number,@acct FROM test.dbo.tblinfoB WHERE userId = @acct このクエリをphpフォームからDBに送りたく下記をphpに記述しました */php mssql_query("INSERT INTO test.dbo.tblInfoA (Number,ID) VALUES ('SELECT Number FROM test.dbo.tblinfoB WHERE userId = $login','$login');") エラーメッセージ message: Conversion failed when converting the varchar value 'SELECT Number FROM test.dbo.tblinfoB WHERE userId = name' to data type int. (severity 16) お分かりの方いましたらご返答よろしくお願いします。