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

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

psql -d myDataBase -a -f myInsertFile 

在我的情况下:

 psql -d HIGHWAYS -a -f CLUSTER_1000M.sql 

然后我被要求为我的用户input一个密码,但是我不能input任何内容,当我按下Enter时,我得到这个错误:

psql:FATAL:密码authentication失败,用户“myUsername”

为什么不让我input密码 有没有办法可以运行这些脚本?

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

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

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

您有四个select来提供密码:

  1. 设置PGPASSWORD环境variables。 详情请参阅手册:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. 使用.pgpass文件来存储密码。 详情请参阅手册:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. 对特定用户使用“信任authentication”: http : //www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. 从PostgreSQL 9.1开始,你也可以使用连接string :
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

当然,你会得到一个致命的错误进行身份validation,因为你不包括一个用户名…

试试这个,对我来说是可以的:)

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

你应该这样做:

 \i path_to_sql_file 

看到:

在这里输入图像说明

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

通过terminallogin到您的数据库,并试试这个:

 database-# >@pathof_mysqlfile.sql 

要么

 database-#>-i pathof_mysqlfile.sql 

要么

 database-#>-c pathof_mysqlfile.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 

然后提示您input用户的密码。

您可以在命令行上同时提供用户名和PASSSWORD。

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

在Linux上查看如何在PostgreSQL的命令行上运行SQL:

打开一个terminal,确保你可以运行psql命令:

 psql --version which psql 

Mine是位于/bin/psql版本9.1.6。

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

编辑该文件,在其中放置一行:

 select * from mytable; 

在命令行上运行这个命令(用你的用户名和你的数据库的名字代替pgadmin和kurz_prod):

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

以下是我在terminal上得到的结果(我没有提示input密码):

 select * from mytable; test1 -------- hi me too (2 rows) 

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

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

Password for user postgres:会显示出来。

input您的密码并input。 我无法看到我input的密码,但这一次,当我按下input它的工作。 其实我正在把数据加载到数据库中。

你甚至可以这样做:

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

如果你有机器上的sudo访问权限,并且不build议在生产脚本上进行testing,那么这是最简单的方法。