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

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

见:

Enter image description here


提供密码有四种选择:

  • 设置pgpassword环境变量。有关详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/libpq-envars.html
  • 使用.pgpass文件存储密码。有关详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  • 对特定用户使用"信任身份验证":http://www.postgresql.org/docs/current/static/auth methods.html auth-trust
  • 由于PostgreSQL 9.1,您还可以使用连接字符串:https://www.postgresql.org/docs/current/static/libpq connect.html libpq-connstring

  • 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

    如果您在机器上有sudo访问权,并且不建议仅在您自己的机器上测试生产脚本,这是最简单的方法。


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

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

    1
    2
    psql --version
    which psql

    我的是9.1.6版,位于/bin/psql中。

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

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

    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"

    Password for user postgres:将出现。

    键入密码并输入。我看不到我输入的密码,但这次按Enter时,它起作用了。实际上,我正在将数据加载到数据库中。