乘风原创程序

  • PostgreSQL 实现sql放入文件批量执行
  • 2021/2/3 10:46:55
  • postgresql sql放入文件,登入数据库之后批量执行

    1. 建立测试sql:

    vi aa.sql

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

    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. 执行:当输入\i时候,会自动检测到./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 | 

    第二个例子:

    vi bb.sql:

    写入一个function:

    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文件

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

    方式一:

    连接db后执行sql文件

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

    psql -d db1 -u usera

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

    \i /patha/xxx.sql

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

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

    方式二:

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

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

    psql -d db1 -u usera -f /patha/xxx.sql

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

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持本教程网。如有错误或未考虑完全的地方,望不吝赐教。