使用psql客户端免交互执行Greenplum SQL

举报
岳涛 发表于 2026/10/21 15:05:05 2026/10/21
【摘要】 Greenplum底层是postgresql,客户端自然也是psql。

Greenplum底层是postgresql,客户端自然也是psql。

背景

Greenplum底层是postgresql,客户端自然也是psql。由于psql本身不支持通过参数来指定密码进行登录,所以需要通过别的方式来实现,这里介绍三种可以实现免交互/免密执行SQL的方法。

实现方案

  • Demo SQL文件
[gpadmincloud@mdw-snova-90g4jkrm ~]$ cat demo.sql 
TRUNCATE test_timestamp;
INSERT INTO test_timestamp VALUES('test',now);
SELECT * FROM test_timestamp;

方案一:把PGPASSWORD写入环境变量实现免密

export PGPASSWORD=‘postgres密码’

[gpadmincloud@mdw-snova-90g4jkrm ~]$ export PGPASSWORD='dy1'
[gpadmincloud@mdw-snova-90g4jkrm ~]$ psql -d dy_test -U dy1 -h 10.0.38.133 -f demo.sql
TRUNCATE TABLE
INSERT 0 1
 name |            time            
------+----------------------------
 test | 2021-03-17 18:55:48.139335
(1 row)

方案二:在家目录下建一个.pgpass实现免密

格式信息:主机名或者IP:端口:数据库名:用户名:密码

[gpadmincloud@mdw-snova-90g4jkrm ~]$ cat .pgpass
10.0.38.133:5432:dy_test:dy1:dy1
[gpadmincloud@mdw-snova-90g4jkrm ~]$ psql -d dy_test -U dy1 -h 10.0.38.133 -f demo.sql
TRUNCATE TABLE
INSERT 0 1
 name |            time            
------+----------------------------
 test | 2021-03-17 18:59:03.471346
(1 row)

方案三:把PGPASSWORD写在一条命令中执行实现免交互

一条命令执行,将密码信息写在前面,用空格分隔:

PGPASSWORD=密码 psql -d 数据库名 -U 数据库名 -h 主机名

[gpadmincloud@mdw-snova-90g4jkrm ~]$ PGPASSWORD=dy1 psql -d dy_test -U dy1 -h 10.0.38.133 -f demo.sql
TRUNCATE TABLE
INSERT 0 1
 name |            time            
------+----------------------------
 test | 2021-03-17 19:00:29.765707
(1 row)

小结

可以看到,有很多方法都可以实现免交互/免密来执行psql。当然,没有最好的方法,只有最适合的方法。

考虑安全性,可以选择方案一和方案二;考虑灵活性,则可以选择方案三。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。