• ベストアンサー
  • すぐに回答を!

ファイルに記述されている複数のSQL文を一度に実行させたい

こんにちわ。 ファイルに記述されているSQL文を、Linuxのコマンドラインなどから 実行したいと考えています。 ファイルに insert into DB_NAME(aaa,bbb,ccc) values(111,222,333); insert into DB_NAME(ddd,eee,fff) values(333,777,222); insert into DB_NAME(aaa,ttt,ddd) values(111,000,999); ... などのSQL文が複数行(例えば1000個ほど)記述しているのを用意して なんかしらの方法で一度に実行させたいのです。 mySQLでは、このようなやり方があるのですが postgreではどのようにすればいいのか、わかりません。 どなたかご存知の方、よろしくお願い致します。 OSはLinuxです。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数25166
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.2
  • root139
  • ベストアンサー率60% (488/809)

#1の方も指摘されている通り、 psql を使えば出来ます。 psql で、-f オプションを使うか、該当のDBに接続して \i コマンドを使えば良いでしょう。 http://www.postgresql.jp/document/pg746doc/html/app-psql.html SQLが記述されているファイルを insert_data.sql、 DBを testdb としますと 例1)------------------------------------------------------------- $ psql testdb Welcome to psql x.x.x, the PostgreSQL interactive terminal. ・ ・ ・ testdb=> \i insert_data.sql testdb=> \q ----------------------------------------------------------------- 例2)------------------------------------------------------------- $ psql testdb -f insert_data.sql ----------------------------------------------------------------- 注) ユーザのDBへのアクセス権によっては -U オプションや -W オプションも必要になります。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 副問い合わせのinsert文

    いつもお世話になっています。 insert文の副問い合わせのことでお聞きしたいのですが、 ■通常のinsert文 insert into AAA values(aaa,bbb,ccc); 上記のsqlを副問い合わせにした場合(aaaに別テーブルからの検索結果を入れたい場合)どういうSQL文になるでしょうか。 参考書等を参照すると、副問い合わせの場合はvaluesを省略する(使えない?)と記述がありました。 insert into AAA values ( aaa IN (SELECT bbb from BBB where ccc = ddd),bbb,ccc); とはできないみたいですので… どうかご教授宜しくお願いします。

  • 連続で実行するには?

    下のように、PostgreSQL に接続して insert を実行するプログラムを書いたのですが、 これらの3つのinsert 文を一気に実行してしまいたい場合、どうすればよいのでしょうか? // insert $sql = "insert into area values (1,'中央区')"; $sql = "insert into area values (2,'東区'); $sql = "insert into area values (3,'西区'); //ここより本文です。 <?php // connect $db_con = pg_connect("","","fuk_gourmet"); if($db_con == false) {print "cannot connect"; exit;} // insert (これだと一つしか実行できない) $sql = "insert into area values (1,'中央区')"; // execute $rs = pg_exec($db_con, $sql); if($rs == false) {print "execute error"; exit;} pg_freeresult($rs); pg_close($db_con); ?>

    • ベストアンサー
    • PHP
  • PHP/MySQL INSERT文について。

    PHP/MySQL INSERT文について。 こんばんは。 PHP・MySQLでデータベースへデータの書き込みを試行錯誤しております。 そこで一つどうしても解決出来ない問題(謎)があるので質問させて頂きます。 簡易的な質問内容としては 全てのカラムに対する値の挿入は可能なのに カラムを指定して値を挿入しようとしたらエラーが出ます。 データベースの設定はテーブル名【TESTtable】 フィールド 種別 NULL 属性/その他 AAA int(6) No UNSIGNED ZEROFILL / auto_increment BBB int(4) Yes CCC int(4) Yes DDD int(4) Yes PHPでのSQL実行文をしてはの記述としては(値は全て可変で数値を代入します。) INSERT INTO TESTtable VALUES (last_insert_id(),50,600,50) とした場合は問題無くテーブルに書き込みされますが カラムを指定して INSERT INTO TESTtable (AAA,BBB,CCC,DDD) VALUES (last_insert_id(),50,600,50) とした場合、書き込みが行われません。 INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable (AAA,'BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),'50','600','50') 等、色々試してみましたが不可能でした。 カラムAAAはauto_incrementにりますので毎回書き込みされますが BBB、CCC、DDDは書き込みが不要の場合もあるので カラム指定の書き込みは必須となるのですが・・・行き詰ってしまいました・・・。 ご教授頂ければ幸いです。 どうぞ、宜しくお願い致します。

    • ベストアンサー
    • MySQL

その他の回答 (1)

  • 回答No.1
noname#223623

やったことないので保証できませんが psql -f SQL文のファイル名 でできるようですけど。 違ったらごめんなさい...

参考URL:
http://collie.low-temp.sci.yamaguchi-u.ac.jp/~ashida/comp/psql.html#psql

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • PHPでInsertを実行したら空白のレコードが追加される

    PostgreSQL 8.0.1 PHP 4 Apache 1.3 で環境を構築しています。 PHPで、 $sql=sprintf("insert into records values('20','test2','cal')"); と入力し実行すると、きれいにDBに登録できるのですが、 $sql=sprintf("insert into records values('%s','%s','%s')",$no,$name,$address); と入力したら、DBには空白で登録されてしまいます。 何がおかしいのか検討が付かなくて困っております 宜しくお願い致します。

  • SQLサーバに日付と時間を入れる

    ASP(VBScript)でSQLサーバに日付と時間を以下のように記述して実行しても うまくいきません。正しい記述方法をお分かりの方教えて ください。 SQL="INSERT INTO master(日付) VALUES('" & "#" & Now & "#')"

  • PHPによるSQL文の中にPHP処理を記述するには

    PHP内のSQL発行部分の $QUERY="     INSERT     INTO         TABLE     (         `FIELD_A`,         `FIELD_B`,         `FIELD_C`     ) values (         `{$DATA[1]}`,         `{$DATA[2]}`,         `{$DATA[3]}`     ) "; このようなクエリを $QUERY="     INSERT     INTO         TABLE     (         `FIELD_A`,         `FIELD_B`,         `FIELD_C`     ) values (         `{$DATA[($i++)]}`,         `{$DATA[($i++)]}`,         `{$DATA[($i++)]}`     ) "; のような感じにしたいのですが うまくいきません。 どうすれば、クエリー文の中で$i++等の処理を 含まさせることができるでしょうか?

    • ベストアンサー
    • PHP
  • SQLでできますか?

    SQLでできますか? INSERT INTO test (A) VALUES (B)というSQLを発行したいのですが、このSQLのVALUESのBにあたる部分を正規表現的に指定して、一度のクエリで以下のような結果を得たいのです。 1.テーブルhogeのpiyoカラムの値の先頭がappleになっている行を探す。 2.(1.)で抽出した行のidの値をBとする。 例えば、以下のようにです。 ■皆様が回答してくださるSQL文(1クエリで行いたい) ???????????? ■皆様が回答してくださるSQL文と同等の意味を持つSQL群 INSERT INTO test (A) VALUES (100) INSERT INTO test (A) VALUES (101) INSERT INTO test (A) VALUES (102) ■テーブルhoge _____id_____piyo__________created 1. 100 applebanana 2009/01/02 2. 101 apple_12345 2009/01/03 3. 102 appleXXXXXX 2009/01/04 4. 103 bananananan 2009/01/05 5. 104 ringogogogo 2009/01/06 分かりにくい説明ですが、お詳しい方、どうかご回答の程を宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • Oracleでのスクリプト実行について

    SQL*Plusで作成した1つの×××.sqlファイル複数のSQL文があります。このSQLを1つづつ確認しながら実行 する事が可能でしょうか? 例えば、以下の×××.sqlファイルでselect文とinsert文 の間で確認をしたいのですが.....。 select ename from emp; insert into (empno) values(10); よろしくお願いします。

  • SQLの構文エラー??

    お世話になっています。 OS:Win2000 DB:Access2000 です。 Insert文、Update文共に「構文エラー」になってしまいます。 ですが、実行したSQL文をAccessのクエリに貼り付けて実行しても エラーにならず、正常に実行されます。 エラーになったSQL文は以下のとおりです。 INSERT INTO D_Schedule (ShisetuNo,YYYYMMDD,ScheTime,Seq,Title,Memo,AddDate,UpdDate) VALUES (1,20041213,'0900',6,'BBB','BBB',#2004/12/16 14:31:49#,#2004/12/16 14:31:49#) UPDATE D_Schedule Set YYYYMMDD =20041213, ScheTime ='0900', Title ='AAA', Memo ='BBB', UpdDate =#2004/12/16 14:30:06# WHERE ShisetuNo=1 AND YYYYMMDD=20041213 AND ScheTime='0900' AND Seq=2 Insert文の場合、Valueの左側を指定しないで Insert Into D_Schedule Values()だとエラーにならないです。 何かお心当たりのある方、ご指摘お願いいたします。 DB更新はADOで行っています。 ADOの接続方法は Set gobjCon = Server.CreateObject("ADODB.Connection") gobjCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & GCOM_DBNAME & ";" です。 SQL文の実行方法は gobjCon.Execute(strSQL) です。よろしくお願いいたします。

  • SQL文のSyntaxエラー

    お世話になります。 以下のSQL文でSyntaxエラーが出てしまい、考えても考えてもエラーが出続けているので「どこでエラーが発生して、訂正したSQL文」をご教授いただければ幸いです。 $sql="insert into 'post' ("name","comment","created_at") values ('" . mysql_real_escape_string($name) . "','" . mysql_real_escape_string($comment) . "','" . date('Y-m-d H:i:s') . "')"; PHP内でのSQL文です。参考にしたのは技術評論社「パーフェクトPHP」p.190です。 以上、よろしくお願いします。

    • 締切済み
    • PHP
  • VBSの中で書くSQL文の記述方法

    よろしくお願いします。 select * from db1 into id,password,date,name where db1_id = **** and db1_password = **** and db1_date = 99999999; (db1_id,db1_password,db1_dateがプライマリキー) db1という表からプライマリキーに該当したデータを取り出し、 変数に格納したいと思っています。 このSQL文をASPのVBSの中で実現する方法を教えてください。 <% Dim Conn,SQL,RS Dim id Dim password Dim date Dim name db1=server.mappath("db1.mdb") DBName="Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & db1 Set Conn = Server.CreateObject("ADODB.Connection") Conn.open DBName SQL = "select * from db1" INTO = "into id,password,date,name" WHERE = "where db1_id = **** and db1_password = **** _ and db1_date = 99999999" SQL = SQL & INTO & WHERE & ";" Set RS = Server.CreateObject("ADODB.Recordset") RS.Open SQL, Conn,3,3 %> これでうまくいくかな~と思ったのですが・・・。

  • SQL文の内容に関わらず、使うメソッドを固定したい

    C# 2010 version 4.0を使用しています。 System.Data.SQLiteにおいて、SQL文を実行するときに 例えば insert文なら command.CommandText = "INSERT INTO tbl1 (title) VALUES ('title1)"; command.ExecuteNonQuery(); select文なら command.CommandText = "SELECT * FROM tbl1"; using (SQLiteDataReader reader = command.ExecuteReader()){ } とSQL文の内容によってそれぞれ別のメソッドを使うと思うのですが、 内容を気にせずとりあえずSQLを発行する処理だけは同じメソッドで 記述することはできないのでしょうか?またはそのようなメソッドなどは用意されてはいないのでしょうか?

  • A5:SQL Mk-2でテーブルは作れないのか?

    xamppとA5:SQL Mk-2ソフトを組み合わせてます。 phpmyadminでデータベースとテーブルを作ってMk-2でsql文 例としてselecto * from aaa;などは動きます。 しかしMk-2で CREATE TABLE shiire(scode CHAR(4),kosuu INT,sdate CHAR(7)); INSERT INTO shiire VALUES ('A002',35,'2003-04'); INSERT INTO shiire VALUES ('B002',24,'2003-05'); は作れません。phpmyadminのクエリでは作れます。 ご教授ください。

    • ベストアンサー
    • MySQL