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

CSh*_*ned 481 postgresql command-line psql

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

psql -d myDataBase -a -f myInsertFile
Run Code Online (Sandbox Code Playgroud)

就我而言:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql
Run Code Online (Sandbox Code Playgroud)

然后我被要求为我的用户输入密码,但我无法输入任何内容,当我点击输入时,我收到此错误:

psql:致命错误:用户"myUsername"的密码验证失败

为什么不让我输入密码.有没有办法围绕这个,因为我可以运行这些脚本至关重要?

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

# IPv6 local connections:
host    myDbName    myUserName ::1/128    trust
Run Code Online (Sandbox Code Playgroud)

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

小智 433

当然,验证时会出现致命错误,因为您没有包含用户名...

试试这个,对我来说没关系:)

psql -U username -d myDataBase -a -f myInsertFile
Run Code Online (Sandbox Code Playgroud)

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

psql -h host -U username -d myDataBase -a -f myInsertFile
Run Code Online (Sandbox Code Playgroud)

  • 为什么`-a` param? (7认同)
  • 这里不需要@ AlikElzin-kilaka` -a`.这是"将所有非空输入行打印到标准输出,因为它们被读取" (5认同)
  • 请注意,提供的用户名必须是有效的postgres角色.默认值是当前登录的用户. (4认同)

Rac*_*naa 282

你应该这样做:

\i path_to_sql_file
Run Code Online (Sandbox Code Playgroud)

看到:

在此输入图像描述

  • 做`chmod 777 myfile`错误'Permission denied`后修复了 (4认同)
  • @Zac如果您的许可被拒绝在Windows计算机上发生,则您可能使用了错误的斜杠。 (4认同)
  • 我在 Windows 上遇到了这个错误,结果是斜杠,正如 @pgsandstrom 提到的。错误的斜杠 = 使用正斜杠代替,并且路径上没有引号。\ic:/dev/script.sql (3认同)
  • 我收到“权限被拒绝” (2认同)

a_h*_*ame 136

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

  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

  • @CSharpened:使用手册中记录的-u参数 (2认同)

vis*_*219 42

export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
Run Code Online (Sandbox Code Playgroud)

  • @ Lu32您也可以省略标志-a(这意味着"在阅读时将所有非空输入行打印到标准输出").编辑测试,没有 - 它打印较少,但仍然是太多的信息.所以-q标志是正确的,正如vishu9219所说. (3认同)
  • psql -h &lt;主机&gt; -d &lt;数据库&gt; -U &lt;用户名&gt; -p &lt;端口&gt; -a -q -w -f &lt;文件&gt;.sql (2认同)

GPr*_*hap 37

当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
Run Code Online (Sandbox Code Playgroud)

然后,系统会提示您输入用户的密码.

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

  • @ ChickenWing24` -a`:所有echo,`-q`:quiet,`-f`:file (3认同)
  • 介意什么是`-a`和`-q`? (2认同)

小智 30

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

\i fileName.sql
Run Code Online (Sandbox Code Playgroud)

对于绝对的道路和

\ir filename.sql
Run Code Online (Sandbox Code Playgroud)

从你调用psql的相对路径.


Sat*_*rma 25

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

database-# >@pathof_mysqlfile.sql
Run Code Online (Sandbox Code Playgroud)

要么

database-#>-i pathof_mysqlfile.sql
Run Code Online (Sandbox Code Playgroud)

要么

database-#>-c pathof_mysqlfile.sql
Run Code Online (Sandbox Code Playgroud)


Dee*_*hni 15

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

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,谢谢 (2认同)

小智 13

psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql
Run Code Online (Sandbox Code Playgroud)

参数解释:

-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
Run Code Online (Sandbox Code Playgroud)


MDK*_*MDK 9

你甚至可以这样做:

sudo -u postgres psql -d myDataBase -a -f myInsertFile
Run Code Online (Sandbox Code Playgroud)

如果你有sudo机器上的访问权限,并且不建议用于生产脚本只是为了在你自己的机器上进行测试,这是最简单的方法.


Eri*_*ski 7

介绍如何在Linux的PostgreSQL命令行上运行SQL:

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

psql --version
which psql
Run Code Online (Sandbox Code Playgroud)

我的版本是9.1.6 /bin/psql.

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

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

select * from mytable;
Run Code Online (Sandbox Code Playgroud)

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

psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql
Run Code Online (Sandbox Code Playgroud)

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

select * from mytable;

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

(2 rows)
Run Code Online (Sandbox Code Playgroud)


win*_*__7 7

2021 解决方案

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

psql dbname < sqldump.sql username
Run Code Online (Sandbox Code Playgroud)

如果它在线托管

psql -h hostname dbname < sqldump.sql username
Run Code Online (Sandbox Code Playgroud)

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