出産前後の痔にはご注意!

こんにちわ。

ファイルに記述されている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です。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

#1の方も指摘されている通り、 psql を使えば出来ます。



psql で、-f オプションを使うか、該当のDBに接続して \i コマンドを使えば良いでしょう。
http://www.postgresql.jp/document/pg746doc/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 オプションも必要になります。
    • good
    • 2

やったことないので保証できませんが


psql -f SQL文のファイル名
でできるようですけど。

違ったらごめんなさい...

参考URL:http://collie.low-temp.sci.yamaguchi-u.ac.jp/~as …
    • good
    • 1

このQ&Aに関連する人気のQ&A

SQL 文」に関するQ&A: batファイルからsql文実行

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qpsqlでエラーログをとりたい

こんにちは、honiyonです。

 WindowsXP + Cygwin + PostgreSQL
 という環境で使用しています。
 psqlは
  http://www.interwiz.koganei.tokyo.jp/software/PostgreSQL/windows.html
 にあるWindows版を使用しています。

 この環境で、ファイルに保存してあるSQLを一括処理した場合に発生するエラーをしる為に、実行結果をファイルに保存したいと思い、

 psql -h localhost [DB名] < sqllist.txt > log.txt

 のように実行してみました。
 確かにログは作成されましたが、正常時のみで肝心のエラーメッセージが省かれて保存されます。
 そこで、

 psql -f sqllist.txt -o log.txt -h localhost [DB名]

 としましたが、変化ありませんでした。

 もしエラーメッセージを保存する方法がありましたら、是非ご教授ください(..
 宜しくお願いします(..

こんにちは、honiyonです。

 WindowsXP + Cygwin + PostgreSQL
 という環境で使用しています。
 psqlは
  http://www.interwiz.koganei.tokyo.jp/software/PostgreSQL/windows.html
 にあるWindows版を使用しています。

 この環境で、ファイルに保存してあるSQLを一括処理した場合に発生するエラーをしる為に、実行結果をファイルに保存したいと思い、

 psql -h localhost [DB名] < sqllist.txt > log.txt

 のように実行してみました。
 確かにログは作成されましたが、正常時のみで肝...続きを読む

Aベストアンサー

#1です。
WINDOWS版って書いてありましたね。
リダイレクトの切り替えはWindowsでも可能です。
(psql -h localhost [DB名] < sqllist.txt) 2>&1) > log.txt

2>&1は標準エラー出力2を標準出力1に切り替えという
意味です。
切り替えた結果を()で囲み、されにファイル出力してます。

Qpsqlコマンド接続によるパスワードについて

psqlコマンドでDBへの接続を行っております。

/usr/local/pgsql/bin/psql -U postgres -h xxx.xxx.xxx.xxx testdb

上記コマンドをコマンドラインから実行するとパスワードが聞かれます。
パスワード設定をmd5にしているためですが、
その設定を変更せずコマンドラインでパスワードを渡すなどしてパスワードの入力を促す処理をスルーしたいのですが全然出来ません。

どのなたかご存知の方、いらっしゃいましたらご教示の程お願い致します。

Aベストアンサー

PGPASSWORD=○○○ /usr/local/pgsql/bin/psql -U postgres -h xxx.xxx.xxx.xxx testdb

QPOSTGRESのデータの格納場所はどこでしょうか?

RedHat7.2/PostgreSQL7.2/という環境で、サーバーがクラッシュしてしまい、データを他のサーバに移し変えないといけなくなりました。そこで、PostgreSQLを再インストールしないとデータベースが使えない状況となりました。

データベースを再インストールするのは良いとして、どこかに格納されているはずのデータベースの内容を取り出し、復帰させたいのですが、方法はありますか?大変困っております。よろしくお願いします。

Aベストアンサー

No.1の追加です。
データの移設でよかったと思います。
または、データを読み込むときに、「iオプション」でディレクトリを指定して、元のファイルを読み込んでもよかったと思います。

Qbatファイルからsql文実行

クライアントOS:WIN2000
Oracle:9i(サーバ(UNIX)上にあります)

現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。
(SQL文は単純にTBLをカウントしているだけです)

・batの中身
sqlplus %UID%/%PASS%@%SID% @test.sql > output

結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか?

・余分な情報
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
に接続されました。

Aベストアンサー

sqlplus に -S オプションを追加してみればどうでしょうか。

参考URL:http://biz.rivus.jp/sqlplus_overview.html

Qtimestampのデータはどのようにして入力

するのでしょうか?

create table tablex(no serial primary key,time timestamp);

insert into tablex(time) values(?);

において?の部分に入れる文字列のフォーマットはどうなるのでしょうか?

例えば
2005年5月5日5時55分55秒
を入れるにはどうしたらいいのでしょうか?

Aベストアンサー

'2005-05-05 05:55:55'

Qpostgresのdatabase名と、そのencodingを取得する

postgresのdatabase名と、そのencodingを取得する方法を教えてください。



postgres8.1です。

システムカタログ
http://www.postgresql.jp/document/pg811doc/html/catalogs.html

pg_databaseの項目として持っているだろうと思い、見てみました。

encodingint4 このデータベースの文字符号化方式

これか?と思いましたが、数値IDのみでした。

この数値から、utf8やsjisといった情報にどうやったら繋がりますか?

Aベストアンサー

pg_encoding_to_char関数で文字エンコーディング名に変換できます。

=> SELECT datname, pg_encoding_to_char(encoding) FROM pg_database;
datname | pg_encoding_to_char
-----------+---------------------
template1 | UTF8
template0 | UTF8
postgres | UTF8
(4 rows)

QPostgreSQLで外部DB内のテーブル参照方法を教えてください

PostgreSQLで別データベースのテーブルを参照することはできますか?

仮に以下のデータベースが2つあるとします
CREATE DATABASE common_db ...
CREATE DATABASE app1_db ...

app1_db に接続した状態で common_db のテーブルを参照することはできますか?

仮にcommon_dbに郵便番号テーブル postcodeがあるとします
CREATE TABLE postcode (
postcode text, --郵便番号
pref_name text, -- 県名
 ・・・
)

このpostcodeテーブルをapp1_dbに接続した状態で参照するには、どのような参照クエリになりますか?
ご教授の程よろしくお願います。
そもそもできないのでしょうか?

Aベストアンサー

PostgreSQL 本体の機能では実現できませんが、contrib モジュールの dblink を使えばできます。

dblink のインストール方法は PostgreSQL のインストール方法によって異なりますが、RPM パッケージであれば postgresql-contrib というパッケージをインストールし、以下のように dblink の関数などを定義します。

psql -f /usr/share/postgresql/contrib/dblink.sql (データベース名)

データベース名には他のデータベースにアクセスしたいデータベース名、例では app1_db を指定します。なお、dblink.sql のパスはパッケージによって異なる場合があります。

dblink をインストールすれば以下のように関数を呼び出して別のデータベース内のテーブルを参照できます。

SELECT * FROM dblink('dbname=common_db', 'SELECT * FROM postcode') AS postcode(postcode text, pref_name text);

dblink について詳しくは PostgreSQL のマニュアルを読んでください。

http://www.postgresql.jp/document/pg840doc/html/dblink.html

ただ、質問の例にあるデータベース名やテーブル名を見ていると、アプリケーションごとに名前空間を分けたいだけのようなので、それであればスキーマを使ったほうがよさそうな気もします。

参考URL:http://www.postgresql.jp/document/pg840doc/html/dblink.html

PostgreSQL 本体の機能では実現できませんが、contrib モジュールの dblink を使えばできます。

dblink のインストール方法は PostgreSQL のインストール方法によって異なりますが、RPM パッケージであれば postgresql-contrib というパッケージをインストールし、以下のように dblink の関数などを定義します。

psql -f /usr/share/postgresql/contrib/dblink.sql (データベース名)

データベース名には他のデータベースにアクセスしたいデータベース名、例では app1_db を指定します。なお、dblink.sq...続きを読む

Qcastの使用法について(初心者です)

始めまして。初心者ですので基本的な質問になるかもしれませんがよろしくお願いします!

なぜかPostgreSQLを仕事に使うことになり、四苦八苦しています。

テーブルを作成しているときに、
create table syouhin (shinamono text, nedan int);
とするとします。
で、insert でデータを入れていきますが、
例:
shinamono | nedan
------------------
みかん |100
マンゴー |200

例えば、nedan のcast が今、int にしましたが、これをchar やfloatに変えたいときはどうすればよろしいのでしょうか?

どなたか御存じの方、お手数ですがお教え下さい!!!

Aベストアンサー

CAST関数の文法は、CAST(○ AS △) となります。
○:変換する値
△:変換する型

Select CAST(nedan AS char(10)) ~
とすればできると思いますよ

Qsqlに記述できない文字

いつもお世話になっております。
WEB画面から入力された項目を対象にPostgresに検索しに行っているのですが、シングルクォート(')が入っていた場合、エラーになってしまいました。

JavaからSQLを生成し、Postgresに接続しているのですが、シングルクォートを検索させるにはどうするのが良いでしょうか。

またSQLに記述できない文字は、シングルクォートのほかに何かありますでしょうか。

よろしくお願いします。

Aベストアンサー

下記のページにPostgreSQLのSQLの文字列定数についての説明が有りますので、記述できない文字などについてはここを見ると良いでしょう。
http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS

さて、シングルクウォートを含む文字列定数への対応としては下記の3つが考えられます。
1. 文字列中のシングルクウォートとバックスラッシュ(\)を\でエスケープする。
2. ドル引用符を使用する。
3. プレースフォルダを使用する。


2は、$xxxx$ のようなドル記号で囲まれた文字列を引用符代わりに使う、PostgreSQL 独自の機能です。
'hoge' と書く代わりに $xxxx$hoge$xxxx$ の様に書けます。
詳しくは下記のページを見て下さい。
http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING

3は、SQLの定数の位置に?を書き、PreparedStatement の set~~() メソッドを使って値を指定する方法です。下記のページが参考になるでしょう。
http://www.atmarkit.co.jp/fjava/rensai2/webopt11/webopt11.html
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/jdbc/getstart/preparedstatement.html

参考URL:http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS

下記のページにPostgreSQLのSQLの文字列定数についての説明が有りますので、記述できない文字などについてはここを見ると良いでしょう。
http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS

さて、シングルクウォートを含む文字列定数への対応としては下記の3つが考えられます。
1. 文字列中のシングルクウォートとバックスラッシュ(\)を\でエスケープする。
2. ドル引用符を使用する。
3. プレースフォルダを使用する。


2は、$xxxx$ のようなドル記号で囲...続きを読む

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング