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

时间:2012-03-16 11:01:43

标签: postgresql command-line psql

我有一些包含数千个INSERT语句的.sql文件,需要在我的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'文件夹中找到。

15 个答案:

答案 0 :(得分:395)

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

试试这个,对我来说没问题:))

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

如果数据库是远程的,请使用与主机

相同的命令
psql -h host -U username -d myDataBase -a -f myInsertFile

答案 1 :(得分:241)

你应该这样做:

\i path_to_sql_file

请参阅:

Enter image description here

答案 2 :(得分:124)

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

  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起,您还可以use a connection string
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

答案 3 :(得分:38)

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

答案 4 :(得分:29)

当PostgreSQL服务器位于不同的位置时,使用此命令执行* .sql文件:

android:elevation="7dp"

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

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

答案 5 :(得分:24)

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

database-# >@pathof_mysqlfile.sql

database-#>-i pathof_mysqlfile.sql

database-#>-c pathof_mysqlfile.sql

答案 6 :(得分:24)

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

\i fileName.sql

表示绝对路径和

\ir filename.sql

表示调用psql的相对路径。

答案 7 :(得分:13)

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

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

答案 8 :(得分:9)

你甚至可以这样做:

 (?m)
 ^ .*? ALLCAPSTEXT .* 
 (?:
      (?! ^ .*? ALLCAPSTEXT )
      [\S\s] 
 )*

如果你在机器上有sudo -u postgres psql -d myDataBase -a -f myInsertFile 访问权限,并且不建议用于生产脚本只是为了在你自己的机器上进行测试,那么这是最简单的方法。

答案 9 :(得分:7)

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

答案 10 :(得分:6)

2021 年解决方案

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

psql dbname < sqldump.sql username

如果是在线托管

psql -h hostname dbname < sqldump.sql username

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

答案 11 :(得分:4)

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

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

Password for user postgres:会出现。

输入您的密码并输入。我无法看到我输入的密码,但这次当我按下输入它有效。实际上我正在将数据加载到数据库中。

答案 12 :(得分:1)

我实现了写(位于我的脚本所在的目录中)

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

其中-u user是拥有要在其中执行脚本的数据库的角色,然后psqlpsql将我加载到{ {1}}最后-d my_database,其中mydatabase回显脚本中的所有输入,并且-a -f file.sql-a执行命令到-f中,然后退出。

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

答案 13 :(得分:0)

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

$ psql -h db.host -d db_name -U my_user < query.sql 

答案 14 :(得分:0)

psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql

-h PostgreSQL 服务器 IP 地址 -d 数据库名称 -U 用户名 -p PostgreSQL 服务器正在侦听的端口 -f 到 SQL 脚本的路径 -a 全回声 -q 安静