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

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值