我有一些 .sql 文件,其中包含数千个 INSERT 语句,需要在我的 PostgreSQL 数据库上运行这些插入,以便将它们添加到表中。这些文件太大以至于无法打开它们并将 INSERT 语句复制到编辑器窗口并在那里运行它们。我在 Internet 上发现,您可以通过导航到 PostgreSQL 安装的 bin 文件夹来使用以下内容:
psql -d myDataBase -a -f myInsertFile
就我而言:
psql -d HIGHWAYS -a -f CLUSTER_1000M.sql
然后我被要求为我的用户输入密码,但我无法输入任何内容,当我按 Enter 时出现此错误:
psql:致命:用户“myUsername”的密码验证失败
为什么不让我输入密码。有没有办法解决这个问题,因为我可以运行这些脚本很重要?
我通过在我的 pg_hba.conf 文件中添加一个具有以下结构的新条目来解决这个问题:
# IPv6 local connections:
host myDbName myUserName ::1/128 trust
pg_hba.conf 文件通常可以在 PostgreSQL 安装的“数据”文件夹中找到。
当然,你会得到一个验证的致命错误,因为你没有包含用户名......
试试这个,对我来说没问题:)
psql -U username -d myDataBase -a -f myInsertFile
如果数据库是远程的,使用与主机相同的命令
psql -h host -U username -d myDataBase -a -f myInsertFile
你应该这样做:
\i path_to_sql_file
看:
https://i.stack.imgur.com/oLP8E.png
Permission denied
chmod 777 myfile
错误 Permission denied
后
您有四种选择来提供密码:
设置 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
-u
参数
当 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
然后会提示您输入用户的密码。
编辑:根据@zwacky 提供的评论更新
-a
:所有回声,-q
:安静,-f
:文件
如果您在 Linux shell 上登录 psql,命令是:
\i fileName.sql
对于绝对路径和
\ir filename.sql
对于您调用 psql 的相对路径。
export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
通过终端登录到您的数据库并尝试以下操作:
database-# >@pathof_mysqlfile.sql
或者
database-#>-i pathof_mysqlfile.sql
或者
database-#>-c pathof_mysqlfile.sql
您可以在命令行本身上同时提供用户名和密码。
psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql
你甚至可以这样做:
sudo -u postgres psql -d myDataBase -a -f myInsertFile
如果您在机器上具有 sudo
访问权限,并且不建议将其用于生产脚本,仅用于在您自己的机器上进行测试,那么这是最简单的方法。
演练如何在 Linux 中的 PostgreSQL 命令行上运行 SQL:
打开终端并确保您可以运行 psql
命令:
psql --version
which psql
我的是位于 /bin/psql
中的 9.1.6 版。
创建一个名为 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)
2021解决方案
如果您的 PostgreSQL 数据库在本地系统上。
psql dbname < sqldump.sql username
如果它在线托管
psql -h hostname dbname < sqldump.sql username
如果您有任何疑问或问题,请在评论中提出。
username
部分,因此它只是 psql dbname < sqldump.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
您可以打开命令提示符并以管理员身份运行。然后输入
../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U "postgres"
Password for user postgres:
将出现。
输入您的密码并输入。我看不到我输入的密码,但这次当我按下回车键时它起作用了。实际上我正在将数据加载到数据库中。
-d "postgres"
-d
对于数据库名称,检查 psql --help
我实现了所写的(位于我的脚本所在的目录中)
::someguy@host::$sudo -u user psql -d my_database -a -f file.sql
其中 -u user
是拥有我要执行脚本的数据库的角色,然后 psql
连接到 psql
控制台,之后 -d my_database
将我加载到 mydatabase
最后 -a -f file.sql
其中 -a
回显脚本和 -f
的所有输入将 file.sql
中的命令执行到 mydatabase
,然后退出。
我正在使用: psql (PostgreSQL) 10.12 on (Ubuntu 10.12-0ubuntu0.18.04.1)
@wingman__7 的 2021 年答案的一个小改进:如果您的用户名包含某些字符(在我的情况下是下划线),您需要使用 -U
标志传递它。
这对我有用:
$ psql -h db.host -d db_name -U my_user < query.sql
尝试在命令行控制台中使用以下命令:
psql -h localhost -U postgres -f restore.sql
-a
参数?-a
这里不需要。它是“在读取所有非空输入行时将它们打印到标准输出”