这篇文章主要介绍了PostgreSQL实现sql放入文件批量执行,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。

PostgreSQLsql放入文件,登入数据库之后批量执行

1.建立测试sql:

viaa.sql插入:猜测每条sql语句是用;分隔的,function中的多个;也会自动识别。

createtabletb1(idinteger);
insertintotb1selectgenerate_series(1,10);
select*fromtb1;
deletefrom
tb1whereid<3;
select*fromtb1;

 

2.将aa.sql放入./src/postgresql-9.3.5/src/tutorial下(./src/postgresql-9.3.5/src/tutorial是PostgreSQL自动识别的目录,当然也可以放在任意目录,比如/home/postgres/aa.sql)

3.切换用户登入

1

2supostgrespsqlpostgres

4.执行:当输入\i时候,会自动检测到./src/postgresql-9.3.5/src/tutorial下的文件,PostgreSQL的测试例子也放在此目录下

postgres=#\iaa.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
(10rows)

CREATETABLE
INSERT010
id
----
1
2
3
4
5
6
7
8
9
10
(10rows)

DELETE2
id
----
3
4
5
6
7
8
9
10
(8rows)

postgres=#

 

postgres=#\dtb1
Table"public.tb1"
Column|Type|Modifiers
--------+---------+-----------
id|integer|

 

第二个例子:

vibb.sql:写入一个function:

createfunctionfunc1()returnsvoidas$$
declare
begin
deletefrompersonwhereid>5;
deletefromtb1whereid>5;
end
$$languageplpgsql;

selectfunc1();

 

执行前:

postgres=#select*fromperson;
id|name
----+------
1|join
2|join
3|join
4|join
5|join
6|join
7|join
8|join
9|join
10|join
(10rows)

postgres=#select*fromtb1;
id
----
3
4
5
6
7
8
9
10
(8rows)

 

执行:

postgres=#\ibb.sql
CREATEFUNCTION
func1
-------

(1row)

 

执行后:

postgres=#select*fromperson;
id|name
----+------
1|join
2|join
3|join
4|join
5|join
(5rows)

postgres=#select*fromtb1;
id
----
3
4
5
(3rows)

postgres=#

 

5.也可以使用psql命令执行

1pslq-dpostgres-Upostgres-f/home/postgres/aa.sql

补充:PostgreSQL-用psql运行SQL文件

对于预先写好的SQL文件,比如/home/user1/updateMyData.sql,可以有两种方式来运行这个SQL文件。

方式一:

连接db后执行SQL文件

首先通过psql连接到对应的db:

1psql-ddb1-UuserA

接着输入密码,进入数据库后,输入:

1\i/pathA/xxx.sql

这里有个问题,如果你把SQL文件的路径里的路径分隔符写成了\,会报错说Permissiondenied。

这里的文件路径必须使用Linux平台下的路径分隔符/,否则会报错。

方式二:

直接通过psql命令执行SQL文件

这种方式无需先登录数据库,直接用一个命令就可以了:

1psql-ddb1-UuserA-f/pathA/xxx.sql

接着输入密码即可执行SQL文件到对应的db里。