PostgreSQLはバッチ実行のためにSQLをファイルに実装しています。
データベースにログインした後、PostgreSQLのsqlをファイルに入れてバッチ実行する
1. テスト用sqlを作成します。
vi aa.sql
挿入:SQL文がそれぞれ;で区切られていることを推測し、関数内の複数の;も自動的に認識される。
create table tb1(id integer);
insert into tb1 select generate_series(1,10);
select * from tb1;
delete from
tb1 where id<3;
select * from tb1;
2. aa.sqlを. に入れる。/src/postgresql-9.3.5/src/tutorial (. /src/postgresql-9.3.5/src/tutorial は PostgreSQL が自動的に認識するディレクトリですが、 /home/postgres/aa.sql などの任意のディレクトリに置くことができます) に置きます。
3.ユーザーログインの切り替え
su postgres
psql postgres
4. 実行します。4.実行: 「♪」と入力すると、自動的に ./src/postgresql-9.3.5/src/tutorial を検出し、PostgreSQL のテストサンプルもこのディレクトリに置かれます。
postgres=# \i aa.sql (\i /home/postgres/aa.sql)
id | name
----+------
1 | join
2 | join
3 | join
4 | join
5 | join
6 | join
7 | join
8 | join
9 | join
10 | join
(10 rows)
CREATE TABLE
INSERT 0 10
id
----
1
2
3
4
5
6
7
8
9
10
(10 rows)
DELETE 2
id
----
3
4
5
6
7
8
9
10
(8 rows)
postgres=#
postgres=# \d tb1
Table "public.tb1"
Column | Type | Modifiers
--------+---------+-----------
id | integer |
2つ目の例
vi bb.sql:
関数を書きます。
create function func1()returns void as $$
declare
begin
delete from person where id>5;
delete from tb1 where id>5;
end
$$language plpgsql;
select func1();
postgresに切り替え、ログインして実行します。
実行前。
postgres=# select * from person ;
id | name
----+------
1 | join
2 | join
3 | join
4 | join
5 | join
6 | join
7 | join
8 | join
9 | join
10 | join
(10 rows)
postgres=# select * from tb1 ;
id
----
3
4
5
6
7
8
9
10
(8 rows)
実行します。
postgres=# \i bb.sql
CREATE FUNCTION
func1
-------
(1 row)
実行後
postgres=# select * from person ;
id | name
----+------
1 | join
2 | join
3 | join
4 | join
5 | join
(5 rows)
postgres=# select * from tb1 ;
id
----
3
4
5
(3 rows)
postgres=#
5. また、psqlコマンドで
pslq -d postgres -U postgres -f /home/postgres/aa.sql
補足です。PostgreSQL - psqlによるSQLファイルの実行
/home/user1/updateMyData.sql のようなあらかじめ記述された SQL ファイルの場合、この SQL ファイルを実行する方法は 2 つあります。
方法1
dbに接続後、SQLファイルを実行する
まず、psqlで対応するdbに接続する。
psql -d db1 -U userA
次に、パスワードを入力し、データベースに入ったら、入力します。
\i /pathA/xxx.sql
ここで問題なのですが、SQLファイルのパスの区切り文字に「♪」と書くと、Permission deniedというエラーになります。
Linuxでは、このファイルパスにはパス区切り文字/を使用しなければならず、そうでない場合はエラーが報告されます。
方法2
psqlコマンドでSQLファイルを直接実行する。
この方法では、最初にデータベースにログインする必要がなく、1つのコマンドで直接行うことができます。
psql -d db1 -U userA -f /pathA/xxx.sql
そして、パスワードを入力することで、対応するdbにSQLファイルを実行することができます。
上記は私の個人的な経験ですが、参考にしていただき、BinaryDevelopをより支持していただければと思います。もし、間違いや不十分な考察があれば、遠慮なくアドバイスしてください。
関連
-
Centos環境でのPostgresqlのインストールと設定、環境変数の設定Tips
-
Postgresqlの行から列への高度な応用と要約のアイデア
-
Postgresqlのユーザーログインエラーの回数を制限するサンプルコード
-
PostgreSQLのユーザーログイン失敗時の自動ロック解決策
-
PostgreSQLでデータの一括インポートのパフォーマンスを向上させるn個の方法を説明します。
-
Postgresql データベース timescaledb timescaledb 問題 大容量データテーブルをスーパーテーブルに変換すること
-
Postgresqlの操作でSQL文の実行効率を表示する
-
GROUP BY句での定数使用に関するPostgreSQLの特別な制限について説明します。
-
pgAdmin for postgreSQLでサーバーのデータをバックアップする方法
-
PostgreSqlのhash_code関数の使用法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
postgresql 重複データ削除 ケーススタディ
-
PostgreSQLのURL解決方法
-
postgresのjsonbプロパティの利用について
-
Postgresqlへのリモートアクセスの設定方法(ファイアウォールの設定またはOFFが必要です。)
-
PostgreSQLで文字列が対象の文字列を含むかどうかを判断する様々な方法
-
Postgresqlのデータベース権限まとめ
-
PostgreSQLの自己インクリメント構文使用上の注意点
-
Postgresqlのセルフインクリメントidをキーにした場合の重複問題の解決
-
Postgresqlのシーケンススキップの問題を解決する
-
PostgreSQLのデータベースでLIKE文の効率を確保する方法(推奨)