我有一些.sql文件,其中有数千条INSERT语句,需要在我的PostgreSQL数据库上运行这些INSERT,以便将它们添加到表中。这些文件太大了,不可能打开它们并将INSERT语句复制到编辑器窗口中并在那里运行。我在网上发现,你可以通过导航到PostgreSQL安装的bin文件夹来使用以下方法:

psql -d myDataBase -a -f myInsertFile

在我的例子中:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

然后我被要求为我的用户输入密码,但我不能输入任何东西,当我按enter键时,我得到这个错误:

psql: FATAL:密码验证失败的用户“myUsername”

为什么它不让我输入密码。是否有一种方法,因为它是至关重要的,我可以运行这些脚本?

我通过在pg_hba.conf文件中添加如下结构的新条目来解决这个问题:

# IPv6 local connections:
host    myDbName    myUserName ::1/128    trust

pg_hba.conf文件通常可以在PostgreSQL安装的'data'文件夹中找到。


当前回答

export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql

其他回答

您有四种选择来提供密码:

Set the PGPASSWORD environment variable. For details see the manual: http://www.postgresql.org/docs/current/static/libpq-envars.html Use a .pgpass file to store the password. For details see the manual: http://www.postgresql.org/docs/current/static/libpq-pgpass.html Use "trust authentication" for that specific user: http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST Since PostgreSQL 9.1 you can also use a connection string: https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

当然,您将得到一个致命的身份验证错误,因为您没有包括用户名…

试试这个,对我来说没问题:)

psql -U username -d myDataBase -a -f myInsertFile

如果数据库是远程的,则对host使用相同的命令

psql -h host -U username -d myDataBase -a -f myInsertFile

你应该这样做:

\i path_to_sql_file

See:

如果您在Linux shell上登录psql,则命令为:

\i fileName.sql

对于绝对路径和

\ir filename.sql

用于调用psql的相对路径。

尝试在命令行控制台中使用以下命令:

psql -h localhost -U postgres -f restore.sql