linux - 无法在 Linux 服务器上自动登录 PostgreSQL

标签 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 '^'"

我也走下了“.pgpass 文件”路线,但无济于事。我将其保存在/home/usr/.pgpass 中,并为其提供了以下凭据

*:*:*:user:my_password

保存后给它权限如下

sudo chmod 600 .pgpass

我不确定这是否相关,但我的 .pgpass 文件路径中的“usr”与我的数据库用户名不同;我在这里作为“用户”所拥有的。此外,我正在运行的脚本位于服务器上与 .pgpass 文件完全不同的目录中。我确定这些都是新手要点,但为了完整起见,我想我会添加它们。 如果有一种方法可以修改现有脚本,使其不会提示我输入密码,那就太好了,否则,如果有人对我可能对 .pgpass 文件做错了什么有任何指导,我将不胜感激。 提前致谢

最佳答案

我认为问题是 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 '^'"

关于linux - 无法在 Linux 服务器上自动登录 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26532142/

相关文章:

shell - 如何在 shell 中删除字符串开头和结尾的空格(\t、\n、\r、空格)?

python - 有没有办法使用 Django 为 SQL 表概念指定列的创建顺序?

Hibernate 和 Postgresql - hibernate 映射文件中的生成器类

arrays - shell脚本数组长度

python - Crontab 未在适用于 Linux 的 Windows 子系统 (WSL) 上运行 python 脚本

postgresql - 使用 Postgres intarray 字段的后代搜索性能

linux - 将文件名前缀作为输入传递给程序

python - 如何解决 Python 脚本中的 NameError 错误(在 linux CentOS 上)

linux - 类似于 vlookup,但在 bash 中将目录中的文件名与 ref 文件进行匹配并返回完整描述

c++ - 使用递归的机器学习算法