bash shell脚本访问PostgreSQL的三种方式

bash脚本里有三种方式访问PostgreSQL数据库

但前提是要设置密码文件。当然对于有系统对应账户的数据库角色可以绕过密码登录环节,如

1
$ sudo -u postgres psql

1
2
$ sudo su - postgres
$ psql

但是对于没有系统账户对应的数据库角色,如要使用脚本登录则必须使用PostgreSQL密码文件

  • heredoc方式

    heredoc是一种很常用的方式,在bash环境下还可以使用变量替换,用法示例

    1
    2
    3
    psql -U ${role} -h ${host} -d mydb << EOF
        CREATE SCHEMA ${role};
    EOF

    也可以在循环语句中,向数据库批量插入数据,类似

    1
    2
    3
    4
    5
    6
    for ...
    do
    psql -U ${role} -h ${host} -d mydb << EOF
        INSERT INTO ${table} VALUES(${value1},${value2},...);
    EOF
    done

    但这种方式,每次插入一条语句都重新登录一次数据库,效率肯定不咋地。
    UPDATE(05/05/2014):既然可以使用变量替换,可以将所有插入语句组合到一个变量中,然后就可以在一次登录中批量插入数据了。

    还可以用以下方式来获取查询结果

    1
    2
    3
    4
    5
    result=`psql -U role -h localhost -d mydb << EOF
        SELECT * FROM products;
    EOF`
    echo ${result}
  • 使用psql命令行选项-f执行sql脚本文件
    1
    psql -U ${role} -h ${host} -d mydb -f ${scriptname}
  • 使用psql命令行选项-c执行SQL语句或psql命令

    psql的-c选项可以指定SQL语句或者psql命令,但二者不能混合,除非使用管道。如果命令参数中有多条SQL语句,则它们在一个事务里执行,除非使用BEGIN/COMMIT明确的指定事务。这与交互式使用psql终端不同,如果不明确指定事务,则每条SQL属于一个单独的事务并自动提交。只有最后一条SQL语句的结果被返回。
    详见psql(1)。

可以看出,虽然有三种方式,但其实都是利用了PostgreSQL提供的外部命令psql,所以更复杂的数据库操作可以考虑使用Python

P.S.
事实证明用bash脚本插入大量数据,其效率相当低下,3510行的两个简单字段的数据竟然用了4分多种。

===
评断一个国家的品格,不仅要看它培养了什么样的人民,还要看它的人民选择对什么样的人致敬,对什么样的人追怀。 —— 约翰·肯尼迪

原链接:http://openwares.net/database/bash_access_postgresql.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux-shell-命令总结

第一种方法执行&#xff1a; 第二种方法执行&#xff1a; 第三种方法执行&#xff1a; 第四种方法&#xff1a;执行 第三种和第四种方法都是在新的进程里执行程序 函数方法 方法就是一个命令&#xff0c;命令写在字符串的第一个位置 type&#xff1a;可以接外部命令&#xff0c…

matlab plot绘制曲线

1)语法 plot(Y) plot(X1,Y1,…) plot(X1,Y1,LineSpec,…) plot(…,’PropertyName’,PropertyValue,…) plot(axes_handle,…) h plot(…) hlines plot(‘v6’,…) 2)说明 plot(Y)如果Y是mn的数组&#xff0c;…

【转】iPython入门技巧

【转】http://www.cnblogs.com/cuiyubo/p/6823478.html 学习《利用python进行数据分析》 第三章 IPython:一种交互式计算和开发环境的笔记&#xff0c;共享给大家&#xff0c;同时为自己作为备忘用。 安装ipython用pip即可。ps.博主用的是win7系统&#xff0c;所以接下来的都是…

进程控制:进程的创建、终止、阻塞、唤醒和切换

进程控制的主要功能是对系统中的所有进程实施有效的管理&#xff0c;它具有创建新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中&#xff0c;一般把进程控制用的程序段称为原语&#xff0c;原语的特点是执行期间不允许中断&#xff0c;它是一个不可分割的基本单位…

jnlp下载

下载.jnlp文件里的内容需先安装好java Java安装好&#xff0c; java环境变量配置http://jingyan.baidu.com/article/4ae03de320d99f3eff9e6bfd.html 打开cmd&#xff08;WinR&#xff09;如下输入javaws \文件路径\ TCIA_REMBRANDT_06-22-2015.jnlp 后&#xff0c;按回车: 按…

使用Dagger 2在GWT中进行依赖注入

依赖注入是一种软件开发概念&#xff0c;其中为对象提供了创建所需的所有对象或值。 GWT用户已经熟悉GIN&#xff0c;但已不推荐使用此工具&#xff0c;因此不再支持&#xff0c;因此使用GIN的应用程序当前确实需要告别。 Dagger是GWT的新依赖注入框架。 对于那些不熟悉该框架的…

Java Web Token - JWT

JWT认证过程&#xff1a;https://www.codetd.com/article/3602378 JWT官方文档&#xff1a;https://jwt.io/introduction/转载于:https://www.cnblogs.com/leodaxin/p/10648358.html

中断和异常,陷阱的区别和联系

对于中断&#xff0c;异常和陷阱的各种关系&#xff0c;总结如下&#xff1a; 表 2.1. 中断&#xff0c;异常和陷阱的区别和联系 对CPU来说是 和当前CPU所执行的指令的关系CPU接下来的事情程序员和用户的态度中断被动的异步的没关系跳转到对应的ISR希望有对应的中断&#xff0c…

matlab global(全局变量)

如果想让某个函数中定义的变量能够被其他函数调用&#xff0c;需要用到全局变量。注意&#xff0c;在这两个函数中都要用global修饰这个变量。如&#xff1a; function t1 global x; x0; function t2 global x; yx end

win 2016 ssh_多台WIN10之间的SSH免密登录

网上有很多关于使用win10-ssh客户端登录linux-ssh服务端的介绍&#xff0c;但很少介绍多台win10-ssh服务端之间互访的。以下记录如何免密登录win10-ssh服务。1、安装OpenSSH。网上有很多介绍通过添加win10可选功能安装openssh&#xff0c;此处不赘述。如果通过添加可选功能出现…

Windows下安装及使用NVM

所谓nvm就是一个可以让你在同一台机器上安装和切换不同版本node的工具。这里是一篇安装及使用教程。 第一步&#xff1a;下载nvm 到github上下载最新版本https://github.com/coreybutler/nvm-windows/releases nvm-noinstall.zip&#xff1a; 这个是绿色免安装版本&#xff0c;…

Operating System-Thread(5)弹出式线程使单线程代码多线程化会产生那些有关问题

Operating System-Thread(5)弹出式线程&&使单线程代码多线程化会产生那些问题本文主要内容 弹出式线程&#xff08;Pop-up threads)使单线程代码多线程化会产生那些问题 一、弹出式线程&#xff08;Pop-up threads) 以在一个http到达之后一个Service的处理为例子来介绍…

cad2016中选择全图字体怎么操作_CAD2016 软件安装教程

安装包下载地址[软件名称]: CAD 2016[安装环境]: Win 10/Win 8/Win 7/Win xp[CAD2016 32-64bit下载链接]:https://pan.baidu.com/s/1AaeIZrJ6IlvBg3QiY3apWw[提取码]&#xff1a;oqcg(建议复制粘贴链接与提取码)安装中有问题可以咨询微信&#xff1a;XYSHY2CAD 2016介绍AutoCAD…

JavaScipt30(第八个案例)(主要知识点:canvas)

承接上文&#xff0c;这是第8个案例&#xff0c;要实现的效果是按住鼠标不放&#xff0c;进行拖动时可以在画布上画出不同粗细不同颜色的曲线。 附上项目链接: https://github.com/wesbos/JavaScript30 主要思路&#xff1a;鼠标按下时&#xff0c;记录当前x,y坐标&#xff0c;…

死锁的产生、预防和避免

死锁是由于并发进程只能按互斥方式访问临界资源等多种因素引起的&#xff0c;并且是一种与执行时间和速度密切相关的错误现象。死锁的一般定义&#xff1a;若在一个进程集合中&#xff0c;每一个进程都在等待一个永远不会发生的事件而形成一个永久的阻塞状态&#xff0c;这种阻…

python numpy.random模块中提供啦大量的随机数相关的函数

1. numpy中产生随机数的方法 1)rand()   产生[0,1]的浮点随机数,括号里面的参数可以指定产生数组的形状 2)randn()  产生标准正太分布随机数&#xff0c;参数含义与random相同 3)randint()  产生指定范围的随机数&#xff0c;最后一个参数是元祖&#xff0c;他确定数组的…

eclipse复制代码连接数据库404_再见,Eclipse ...

点击上方“Java基基”&#xff0c;选择“设为星标”做积极的人&#xff0c;而不是积极废人&#xff01;源码精品专栏 中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库中间件 Sharding-JDBC 和 MyCAT 源码解析作业…

单页vue路由router

Vue.js vue-router 可以很简单的实现单页应用。 <router-link> 是一个组件&#xff0c;该组件用于设置一个导航链接&#xff0c;切换不同 HTML 内容。 to 属性为目标地址&#xff0c; 即要显示的内容。 以下实例中我们将 vue-router 加进来&#xff0c;然后配置组件和路…

python 多线程为什么鸡肋?

什么是全局解释器锁GIL Python代码的执行由Python 虚拟机(也叫解释器主循环&#xff0c;CPython版本)来控制&#xff0c;Python 在设计之初就考虑到要在解释器的主循环中&#xff0c;同时只有一个线程在执行&#xff0c;即在任意时刻&#xff0c;只有一个线程在解释器中运行。对…