使用命令行参数运行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来提供密码:
- 设置PGPASSWORD环境variables。 详情请参阅手册:
http://www.postgresql.org/docs/current/static/libpq-envars.html - 使用.pgpass文件来存储密码。 详情请参阅手册:
http://www.postgresql.org/docs/current/static/libpq-pgpass.html - 对特定用户使用“信任authentication”: http : //www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
- 从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,那么这是最简单的方法。