PostgreSQL 实现sql放入文件批量执行

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里。

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

(0)

相关推荐

  • 在postgresql中结束掉正在执行的SQL语句操作

    结束进程两种方式: SELECT pg_cancel_backend(PID) 取消后台操作,回滚未提交事物 (select); SELECT pg_terminate_backend(PID) 中断session,回滚未提交事物(select.update.delete.drop); SELECT * FROM pg_stat_activity; 根据datid=10841 SELECT pg_terminate_backend (10841); 补充:PostgreSQL无法在PL / pg

  • 解决PostgreSQL 执行超时的情况

    使用背景 最近在使用PostgreSQL的时候,在执行一些数据库事务的时候,先后出现了statement timetout 和idle-in-transaction timeout的问题,导致数据库操作失败. 经研究查找,PostgreSQL有关于SQL语句执行超时和事务执行超时的相关配置,而默认超时时间是10000毫秒,即10秒钟的时间,这样会导致执行时间稍长的任务执行失败.可以通过修改PostgreSQL服务器配置文件的方式修改默认配置. 参数说明 statement_timeout sta

  • 在postgresql中通过命令行执行sql文件

    通过命令行执行初始化sql脚本是比较常见的需求,命令行下执行如下操作即可: 若是执行的命名只是创建用户,编辑用户,创建数据库的话可以不指定-d参数. psql -U username -d myDataBase -a -f init.sql 如果是远程数据库加入-h参数指定主机地址即可 psql -h host -U username -d myDataBase -a -f init.sql 补充:PostgreSQL操作-psql基本命令 一.建立数据库连接 接入PostgreSQL数据库:

  • PostgreSQL查看正在执行的任务并强制结束的操作方法

    查看任务sql语句: SELECT procpid, start, now() - start AS lap, current_query FROM (SELECT backendid, pg_stat_get_backend_pid(S.backendid) AS procpid, pg_stat_get_backend_activity_start(S.backendid) AS start, pg_stat_get_backend_activity(S.backendid) AS curr

  • PostgreSQL 实现定时job执行(pgAgent)

    PostgreSQL中定时job执行 业务分析 近期项目需要定期清理数据库中的多余数据,即每月1号删除指定表中一年以上的数据. 初步分析这种定时job可以使用一下两种技术实现: Linux的crontab功能 pgadmin的pgAgent功能 为了避免数据库系统和操作系统的绑定,最后决定在数据库层面实现自动清理功能,即使用pgAgent功能 介绍 pgAgent是pgAdmin III工具中的一个插件,它在pgAdmin III v1.4版本中引用. 主要用于PostgreSQL的作业调度代理

  • Postgresql的pl/pgql使用操作--将多条执行语句作为一个事务

    Postgresql的pl/pgql用法--将多条执行语句作为一个事务 DO $$ DECLARE v_id bigint; begin --1. INSERT INTO r_test_a (name, value, unit, mode, uid, create_ts) SELECT 't_t','','',2,0, extract(epoch from now())::bigint WHERE NOT EXISTS (SELECT id FROM r_test_a WHERE name =

  • Postgresql psql文件执行与批处理多个sql文件操作

    新建一个批处理文件batch.sql \encoding UTF8; \cd C:/Gmind/ddl \set ON_ERROR_STOP 1 \set ECHO all \timing on \i s_product.sql; \i s_branch.sql; \i s_comment.sql; \i s_class.sql; \i s_drawing.sql; \i s_dmemo.sql; \i s_form.sql; \encoding 设置客户端字符集编码(可选) \cd 切换目录.

  • PostgreSQL 实现sql放入文件批量执行

    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放入 ./

  • c#实现用SQL池,多线程定时批量执行SQL语句的方法

    在实际项目开发中,业务逻辑层的处理速度往往很快,特别是在开发Socket通信服务的时候,网络传输很快,但是一旦加上数据库操作,性能一落千丈,数据库操作的效率往往成为一个系统整体性能的瓶颈.面对这问题,我们怎么办呢?好,下面我就为大家介绍一种方法:构建SQL池,分离业务逻辑层和数据访问层,让业务逻辑层从低效的数据库操作解脱,以提高系统整体性能. (一)SQL池 SQL池是SQL容器,用于存放业务逻辑层抛过来的SQL语句.SQL池主要提供以下几种方法: 1)internal string Pop()

  • sqlserver中通过osql/ocmd批处理批量执行sql文件的方法

    利用osql/ocmd批处理批量执行sql文件 注意:在上图中我们可以看到osql 并不支持 SQL Server 2008的所有功能,如果需要使用SQL Server 2008的所有功能可以使用ocmd命令. 有了osql/ocmd命令要批量执行sql文件当然需要写一个批处理命令,例如我们执行上面sql文件就可以在txt中编写下面的语句: 复制代码 代码如下: osql -S"127.0.0.1" -U"sa" -P"sa" -d"N

  • mysql批量执行sql文件的方法

    1.待执行的sql文件为1.sql.2.sql.3.sql.4.sql等 2.写一个batch.sql文件: source 1.sql; source 2.sql; source 3.sql; source 4.sql; 3.在mysql下执行source /batch文件所在目录/batch.sql; 以上就是小编为大家带来的mysql批量执行sql文件的方法全部内容了,希望大家多多支持我们~

  • Windows环境下实现批量执行Sql文件

    使用场景:按文件名字正序,批量执行某文件夹下的所有sql文件,并输出日志 适合人群:实施工程师 一.使用篇 1.准备bat文件: 1.1.ExecSql.bat(执行脚本)(文件编码:ANSI,这个编码与下面提到的utf8和gb2312都不一样,用记事本编辑默认就是这个编码,所以不一定要下notepad++) @ECHO OFF SET dbhost=127.0.0.1 SET dbuser=sa SET dbpasswd=sa SET dbName=Application REM 以下内容不建

  • Oracle批量执行sql语句之禁用所有表的外键

    在转移数据库,进行数据导入的时候,遇到一件麻烦事,就是表间外键约束的存在,导致insert频频报错,批量执行sql语句又是顺序执行,没办法我只好手动输入. 然后输入到一半灵光一闪,为什么不先把外键约束全部禁用先呢? 于是我百度到以下资料: oracle 删除(所有)约束 禁用(所有)约束 启用(所有)约束 执行以下sql生成的语句即可 1删除所有外键约束 select 'alter table '||table_name||' drop constraint '||constraint_name

  • PHP mysqli 增强 批量执行sql 语句的实现代码

    mysqli 增强-批量执行sql 语句 复制代码 代码如下: <?php //mysqli 增强-批量执行sql 语句 //批量执行dql    //使用mysqli的mysqli::multi_query() 一次性添加3个用户 $mysqli =new MySQLi("localhost","root","root","test");    if($mysqli->connect_error){       

  • python读取csv文件并把文件放入一个list中的实例讲解

    如下所示: #coding=utf8 ''' 读取CSV文件,把csv文件放在一份list中. ''' import csv class readCSV(object): def __init__(self,path="Demo.csv"): #创建一个属性用来保存要操作CSV的文件 self.path=path try: #打开一个csv文件,并赋予读的权限 self.csvHand=open(self.path,"r") #调用csv的reader函数读取csv

  • python 把文件中的每一行以数组的元素放入数组中的方法

    有时候需要把文件中的数据放入到数组中,这里提供了一种方法,可以根据文件结尾的标记进行数据拆分,然后再把拆分的文件放入数组中 # -*-coding: utf-8 -*- f = open("username.txt","w") f.write("Lycoridiata\n") f.write("wulei\n") f.write("leilei\n") f.write("Xingyu\n"

  • Oracle固定执行计划之SQL PROFILE概要文件详解

    1.  引子 Oracle系统为了合理分配和使用系统的资源提出了概要文件的概念.所谓概要文件,就是一份描述如何使用系统的资源(主要是CPU资源)的配置文件.将概要文件赋予某个数据库用户,在用户连接并访问数据库服务器时,系统就按照概要文件给他分配资源. 包括: 1.管理数据库系统资源. 利用Profile来分配资源限额,必须把初始化参数resource_limit设置为true默认是TRUE的. 2.管理数据库口令及验证方式. 默认给用户分配的是DEFAULT概要文件,将该文件赋予了每个创建的用户

随机推荐