Postgresql:使用密码脚本执行psql执行

我怎样才能调用psql ,使其不提示input密码

这是我的:

psql -Umyuser < myscript.sql 

但是,我找不到传递密码的参数,所以psql总是提示input密码。

有几种方法来validationpostgresql。 您可能希望在http://www.postgresql.org/docs/current/static/client-authentication.html上调查密码authentication的替代scheme。;

要回答你的问题,有几种方法提供基于密码的authentication的密码。 显而易见的方法是通过密码提示。 除此之外,您可以在pgpass文件中或通过PGPASSWORD环境variables提供密码。 看到这些:

http://www.postgresql.org/docs/9.0/static/libpq-pgpass.html http://www.postgresql.org/docs/9.0/interactive/libpq-envars.html

没有选项将密码作为命令行参数提供,因为该信息通常对所有用户可用,因此不安全。 但是,在Linux / Unix环境中,您可以为单个命令提供一个环境variables,如下所示:

PGPASSWORD = yourpass psql …

 PGPASSWORD=[your password] psql -Umyuser < myscript.sql 

您可以在脚本开始时添加这个命令行:

 set PGPASSWORD=[your password] 

如果你打算有多个主机/数据库连接, 〜/ .pgpass文件是要走的路。

脚步:

  1. 创build〜/ .pgpass文件。 以下列格式input您的信息hostname:port:database:username:password
  2. 不要在字段值周围添加string引号。 您也可以使用*作为端口/数据库字段的通配符。
  3. 在您的bashconfiguration文件中为您运行psql命令创build一个别名。 例如: alias postygresy='psql --host hostname database_name -U username'这些值应该与您input到〜/ .pgpass文件的值相匹配。
  4. 源你的bashconfiguration文件。
  5. 从命令行键入您的别名。

请注意,如果您有一个导出PGPASSWORD =''variables集,它将优先于该文件。 更改文件的权限也是明智的,这样内容就会被其他用户遮住了。 这可以通过chmod 600 ~/.pgpass来实现

您必须创build密码文件:有关更多信息,请参阅http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html

如果你像我这样的Windows(我正在使用Windows 7 64位)有问题,并set PGPASSWORD=[Password]不起作用。

然后,正如Kavaklioglu在其中一个评论中所说:

 export PGPASSWORD=[password] 

您需要将其保存在文件的顶部,或者在调用之前设置其使用之前。

当然在Windows上工作:)

考虑到使用PGPASSWORD环境variables的安全问题,我认为最好的整体解决scheme如下:

  1. 用你想使用的密码写你自己的临时pgpass文件。
  2. 使用PGPASSFILE环境variables来告诉psql使用该文件。
  3. 删除临时的pgpass文件

这里有几点需要注意。 第1步是为了避免用户的〜/ .pgpass文件可能存在。 您还必须确保该文件的权限为0600或更less。

有人build议利用bash快捷键如下:

 PGPASSFILE=<(echo myserver:5432:mydb:jdoe:password) psql -h myserver -U jdoe -p 5432 mydb 

这使用<()语法来避免将数据写入实际文件。 但它不起作用,因为psql检查正在使用的文件,并会抛出如下错误:

 WARNING: password file "/dev/fd/63" is not a plain file 

您可能会觉得这很有用: Windows PSQL命令行:有没有办法允许无密码login?

基于mightybyte对那些不熟悉* nix shell脚本的人的回答 ,下面是一个工作脚本:

 #!/bin/sh PGPASSFILE=/tmp/pgpasswd$$ echo "myserver:5432:mydb:jdoe:password" > $PGPASSFILE chmod 600 $PGPASSFILE export PGPASSFILE psql mydb rm $PGPASSFILE 

第2行的/tmp/pgpasswd$$中的双美元符号( $$ )将进程ID号附加到文件名,以便此脚本可以多次运行,即使同时运行也没有副作用。

请注意在第4行使用chmod命令 – 就像可能描述的“ 不是纯文件 ”错误一样,如果没有完成,也会出现“ 许可 ”错误。

在第6行,如果使用默认值( localhost5432 ),则不必使用-h myserver-p myport-U jdoe标志,只有一个数据库用户。 对于多个用户,(但默认连接)将该行更改为

 psql mydb jdoe 

不要忘记使脚本可执行

chmod +x runpsql或者你所说的脚本文件

我发现,即使你定义了PGPASSWORDvariables,psql也显示密码提示符,但是你可以指定psql的-w选项来省略密码提示。

在命令中使用-w:psql -h localhost -p 5432 -U用户-w