2016-11-30 339 views
0

我是Postgres和Bash的新手,所以我不确定它们有什么不同。sudo -u postgres psql和sudo psql -U postgres有什么区别?

我想在bg脚本中自动化更新Postgres中的表。我有.sql文件,我创建了.pgpass文件,其中包含600.

提供给我的脚本使用sudo -u postgres psql db -w < .sql,并且因为找不到该通道而失败。

鉴于sudo psql -U postgres db -w < .sql不会提示通过并且能够更新。

那有什么区别?为什么第一个命令不能通过.pgpass传递?

+0

Stack Overflow是编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。另请参阅[我在哪里发布有关Dev Ops的问题?](http://meta.stackexchange.com/q/134306) – jww

回答

2

sudo -u postgres运行命令串的其余部分的UNIX用户postgres

sudo psql -U postgres db -w运行命令作为UNIX用户root和(presumeably)连接到postgres的作为用户“postgres的”

大概.pgpass文件对于unix用户postgres不存在。

+2

大多数安装都配置“peer”身份验证,因此'postgres'用户可以获得信任,因为其unix用户名匹配其postgres用户名。 –

0

这是对等身份验证的情况。如果你运行的是用户x,并且你的数据库上有用户x,那么你就可以被postgres信任,所以你不必使用密码(安装的默认设置)。运行sudo psql -u x你试图从用户root连接到数据库,用户名是x ... root!= x,所以你需要密码。客户端身份验证由configuration file pg_hba.conf控制您也可以提供密码via .pgpass file。你会在PostgreSQL文档中找到所有需要的信息。

相关问题