Run a PostgreSQL .sql file using command line arguments
我有一些.sql文件,其中包含数千个insert语句,需要在我的PostgreSQL数据库中运行这些insert,以便将它们添加到表中。这些文件太大,无法打开它们并将insert语句复制到编辑器窗口中,然后运行它们。我在互联网上发现,通过导航到PostgreSQL安装的bin文件夹,您可以使用以下内容:
1 | psql -d myDataBase -a -f myInsertFile |
在我看来:
1 | psql -d HIGHWAYS -a -f CLUSTER_1000M.sql |
然后会要求我为我的用户输入密码,但我无法输入任何内容,当我单击"输入"时,会出现以下错误:
psql: FATAL: password authentication failed for user"myUsername"
为什么不让我输入密码呢?是否有解决方法,因为运行这些脚本很关键?
我通过在pg_hba.conf文件中添加一个具有以下结构的新条目来解决这个问题:
1 2 | # IPv6 LOCAL connections: host myDbName myUserName ::1/128 trust |
pg_hba.conf文件通常可以在PostgreSQL安装的"data"文件夹中找到。
当然,认证时会出现一个致命的错误,因为您不包括用户名…
试试这个,我没问题:)
1 | psql -U username -d myDataBase -a -f myInsertFile |
如果数据库是远程的,请对主机使用相同的命令
1 | psql -h host -U username -d myDataBase -a -f myInsertFile |
你应该这样做:
1 | \i path_to_sql_file |
见:
提供密码有四种选择:
1 2 | export PGPASSWORD=<password> psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql |
当PostgreSQL服务器位于不同位置时,使用此命令执行*.sql文件:
1 2 3 4 5 6 7 8 9 10 | 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 -f file |
然后提示您输入用户的密码。
编辑:根据@zwacky提供的评论进行更新
如果您在Linux shell上登录到psql,则命令为:
1 | \i fileName.sql |
对于绝对路径和
1 | \ir filename.sql |
从中调用psql的相对路径。
通过终端登录到数据库并尝试以下操作:
1 | database-# >@pathof_mysqlfile.sql |
或
1 | database-#>-i pathof_mysqlfile.sql |
或
1 | database-#>-c pathof_mysqlfile.sql |
您可以在命令行上同时提供用户名和密码。
1 | psql"dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql |
你甚至可以这样做:
1 | sudo -u postgres psql -d myDataBase -a -f myInsertFile |
如果您在机器上有
介绍如何在Linux中PostgreSQL的命令行上运行SQL:
打开终端,确保可以运行
1 2 | psql --version which psql |
我的是9.1.6版,位于
创建一个名为
编辑该文件,在其中放一行:
1 | SELECT * FROM mytable; |
在命令行上运行此命令(将用户名和数据库名称替换为pgadmin和kurz_prod):
1 | psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql |
以下是我在终端上得到的结果(不提示我输入密码):
1 2 3 4 5 6 7 8 | SELECT * FROM mytable; test1 -------- hi me too (2 ROWS) |
您可以打开命令提示符并以管理员身份运行。然后类型
1 | ../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U"postgres" |
键入密码并输入。我看不到我输入的密码,但这次按Enter时,它起作用了。实际上,我正在将数据加载到数据库中。