无法在Linux服务器上自动执行PostgreSQL登录

时间:2014-10-23 15:51:29

标签: linux postgresql shell

我在这里看到了一些相关的问题,并尝试了几乎所有的解决方案,但显然我仍然缺少一些愚蠢的东西。我试图绕过使用脚本登录PostgreSQL的需要。它是一个非常基本的脚本,可以将服务器上的文本文件复制到我的数据库中的表中,并且工作正常,除了它提示我每次运行时都会登录到PostgreSQL。我打算写一个每天执行此任务的cron作业,因此该过程需要是自动的。这是脚本。

export PGPORT=5432
export PGDATABASE=db_name
export PGUSER=user
export PGPASSWORD=my_password

psql -h host_name -p 5432 -U user -W db_name -c "\COPY schema.table_name (col1, col2, col3, col4)       
from path_to_txt_file with DELIMITER '^'"

我也去了#34; .pgpass文件"路线无济于事。我将它保存在/home/usr/.pgpass中,并为其提供了以下凭据

*:*:*:user:my_password

保存了它,然后赋予它以下权限

sudo chmod 600 .pgpass

我不确定这是否相关,但我所拥有的是" usr"在我的文件路径中.pgpass文件与我的数据库用户名不同;我在这里和#34;用户"。我运行的脚本也在服务器上与.pgpass文件完全不同的目录中。这些都是我确定的新手点,但为了完成,我想我会添加它们。 如果有办法修改现有脚本,以便它没有提示我输入一个很好的密码,否则,如果有人对.pgpass文件我可能做错了什么有任何指导,我会'我很欣赏它。 提前致谢

4 个答案:

答案 0 :(得分:1)

我认为问题是PostgreSQL文档中的选项“-W”,“ - W”表示“强制psql在连接到数据库之前提示输入密码。”

我建议你使用这个

export PGPORT=5432
export PGDATABASE=db_name
export PGUSER=user
export PGPASSWORD=my_password
psql -h host_name -p $PGPORT -U $PGUSER -d $PGDATABASE -c "\COPY schema.table_name(col1, 
col2, col3, col4) from path_to_txt_file with DELIMITER '^'"

答案 1 :(得分:1)

除了Mabu所说的:

Postgresql拥有自动登录所需的一切,并且能够将连接参数保留在代码之外。

除了密码的.pgpass文件,您还可以在service file

中定义所有连接参数

答案 2 :(得分:0)

我认为这里的问题是我的pg_hba.conf文件需要编辑以包含我尝试访问数据库的用户名。遗憾的是,数据库位于AWS RDS服务器实例上,其中pg_hba.conf文件不可编辑。除了手动进入实例并尝试编辑它而没有成功之外,这里还提到了这一点:https://serverfault.com/questions/560596/how-do-a-i-edit-conf-file-for-a-postgres-aws-rds。它可能会归结为构建一个可以访问这些配置文件的EC2实例。

答案 3 :(得分:0)

我的上述答案得到了纠正。 .pgpass文件位于错误的目录中。我使用用户名ubuntu登录我的linux服务器,所以在将.pgpass文件移动到/ home / ubuntu并从上面的脚本中删除PGPASSWORD行之后(如果在脚本中留下了.pgpass文件将会被忽略。) )它现在完美无缺。现在看一下,这一切似乎都很明显。我希望这可能会在将来给某人带来一些压力。