1. ホーム
  2. データベース
  3. ポストグレスキュー

PostgreSQLはバッチ実行のためにSQLをファイルに実装しています。

2022-01-19 14:16:32

データベースにログインした後、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をより支持していただければと思います。もし、間違いや不十分な考察があれば、遠慮なくアドバイスしてください。