我是Postgres和Bash的新手,所以我不确定有什么区别。
我正在尝试在bash脚本中自动化,以更新Postgres中的表。我有.sql文件,并且我已经使用600。
创建了.pgpass
文件。
提供给我的A脚本使用sudo -u postgres psql db -w < .sql
,并且由于无法找到通行证而失败。
,而sudo psql -U postgres db -w < .sql
没有提示通行证,并且能够更新。
那么有什么区别?为什么第一个命令不能从.pgpass获得通行证?
sudo -u postgres
作为unix用户postgres
sudo psql -U postgres db -w
作为Unix用户root
和(本来可以)连接到Postgres的命令,因为用户" Postgres"
可能不存在Unix用户Postgres的.pgpass文件。
这是同伴自动化的情况。如果您正在运行用户X,并且在数据库上有user X,则Postgres信任您,因此您不必使用密码(默认设置Instalation)。运行sudo psql -u x,您正在尝试将用户根到数据库连接为用户x ... root!= x,因此您需要密码。客户端身份验证由配置文件pg_hba.conf控制您还可以通过.pgpass文件提供密码。您会在PostgreSQL文档中找到所有需要的信息。