使用命令行参数运行PostgreSQL. sql文件

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

psql -d myDataBase -a -f myInsertFile

在我的案例中:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

然后,我被要求为我的用户输入密码,但我无法输入任何内容,当我按回车键时,我得到这个错误:

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

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

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

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

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

1033644 次浏览

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

  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

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

试试这个,对我来说还不错:)

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

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

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

介绍如何在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)

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

database-# >@pathof_mysqlfile.sql

database-#>-i pathof_mysqlfile.sql

database-#>-c pathof_mysqlfile.sql

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

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

Password for user postgres:将显示。

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

你应该这样做:

\i path_to_sql_file

见:

在此处输入图像描述

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

当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提供的评论更新

您可以在命令行本身使用“-d”参数提供用户名和PASSSWORD

   psql -d "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql

你甚至可以这样做:

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

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

如果您在Linuxshell上登录到psql,则命令为:

\i fileName.sql

对于绝对路径和

\ir filename.sql

用于调用psql的相对路径。

我完成了写(位于我的脚本所在的目录中)

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

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

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

2021解决方案

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

psql dbname < sqldump.sql username

如果它是在线托管的

psql -h hostname dbname < sqldump.sql username

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

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

$ psql -h db.host -d db_name -U my_user < query.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

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

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