639

我有一些 .sql 文件,其中包含数千个 INSERT 语句,需要在我的 PostgreSQL 数据库上运行这些插入,以便将它们添加到表中。这些文件太大以至于无法打开它们并将 INSERT 语句复制到编辑器窗口并在那里运行它们。我在 Internet 上发现,您可以通过导航到 PostgreSQL 安装的 bin 文件夹来使用以下内容:

psql -d myDataBase -a -f myInsertFile

就我而言:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

然后我被要求为我的用户输入密码,但我无法输入任何内容,当我按 Enter 时出现此错误:

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

为什么不让我输入密码。有没有办法解决这个问题,因为我可以运行这些脚本很重要?

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

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

pg_hba.conf 文件通常可以在 PostgreSQL 安装的“数据”文件夹中找到。

4

15 回答 15

593

当然,你会得到一个验证的致命错误,因为你没有包含用户名......

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

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

如果数据库是远程的,使用与主机相同的命令

psql -h host -U username -d myDataBase -a -f myInsertFile
于 2012-08-23T05:57:23.673 回答
371

你应该这样做:

\i path_to_sql_file

看:

在此处输入图像描述

于 2014-10-04T12:00:54.253 回答
180

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

  1. 设置 PGPASSWORD 环境变量。有关详细信息,请参阅手册:
    http ://www.postgresql.org/docs/current/static/libpq-envars.html
  2. 使用 .pgpass 文件存储密码。有关详细信息,请参阅手册:
    http ://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. 对该特定用户使用“信任身份验证”:http ://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. 从 PostgreSQL 9.1 开始,您还可以使用连接字符串
    https ://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
于 2012-03-16T11:13:10.373 回答
72

当 PostgreSQL 服务器位于不同的地方时,使用它来执行 *.sql 文件:

psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql

-h PostgreSQL server IP address
-d database name
-U user name
-p port which PostgreSQL server is listening on
-f path to SQL script
-a all echo
-q quiet

然后会提示您输入用户的密码。

编辑:根据@zwacky 提供的评论更新

于 2016-08-10T13:30:50.453 回答
64

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

\i fileName.sql

对于绝对路径和

\ir filename.sql

对于您调用 psql 的相对路径。

于 2018-02-13T13:25:17.883 回答
52
export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
于 2015-03-10T07:29:41.347 回答
30

通过终端登录到您的数据库并尝试以下操作:

database-# >@pathof_mysqlfile.sql

或者

database-#>-i pathof_mysqlfile.sql

或者

database-#>-c pathof_mysqlfile.sql
于 2012-11-26T08:11:00.963 回答
19

您可以在命令行本身上同时提供用户名和密码。

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql
于 2017-01-12T21:49:20.593 回答
16

你甚至可以这样做:

sudo -u postgres psql -d myDataBase -a -f myInsertFile

如果您sudo可以在机器上访问,并且不建议仅在您自己的机器上测试生产脚本,这是最简单的方法。

于 2017-07-28T21:43:09.363 回答
11

演练如何在 Linux 中的 PostgreSQL 命令行上运行 SQL:

打开终端并确保您可以运行以下psql命令:

psql --version
which psql

我的是 9.1.6 版,位于/bin/psql.

创建一个名为的纯文本文件mysqlfile.sql

编辑那个文件,在里面放一行:

select * from mytable;

在命令行上运行此命令(将您的用户名和数据库名称替换为 pgadmin 和 kurz_prod):

psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql

以下是我在终端上得到的结果(没有提示我输入密码):

select * from mytable;

test1
--------
hi
me too

(2 rows)
于 2012-10-16T15:04:30.097 回答
9

2021解决方案

如果您的 PostgreSQL 数据库在本地系统上。

psql dbname < sqldump.sql username

如果它在线托管

psql -h hostname dbname < sqldump.sql username

如果您有任何疑问或问题,请在评论中提出。

于 2021-01-09T04:29:55.490 回答
4

您可以打开命令提示符并以管理员身份运行。然后输入

../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U "postgres"

Password for user postgres:会出现。

输入您的密码并输入。我看不到我输入的密码,但这次当我按下回车键时它起作用了。实际上我正在将数据加载到数据库中。

于 2013-03-08T18:04:09.890 回答
4
psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql

参数说明:

-h PostgreSQL server IP address
-d database name
-U user name
-p port which PostgreSQL server is listening on
-f path to SQL script
-a all echo
-q quiet
于 2021-07-20T14:52:01.293 回答
1

我实现了所写的(位于我的脚本所在的目录中)

::someguy@host::$sudo -u user psql -d my_database -a -f file.sql 

-u user 拥有我要执行脚本的数据库的角色在哪里,然后连接psqlpsql控制台,然后-d my_database将我加载到mydatabase最后-a -f file.sql,在其中-a回显来自脚本的所有输入并从into-f执行命令,然后退出。file.sqlmydatabase

我正在使用: psql (PostgreSQL) 10.12 on (Ubuntu 10.12-0ubuntu0.18.04.1)

于 2020-04-12T08:34:01.807 回答
0

@wingman__7 的 2021 年答案的一个小改进:如果您的用户名包含某些字符(在我的情况下是下划线),您需要将其与-U标志一起传递。
这对我有用:

$ psql -h db.host -d db_name -U my_user < query.sql 
于 2021-05-26T15:42:01.863 回答