我有一些包含数千个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'文件夹中找到。
答案 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
请参阅:
答案 2 :(得分:124)
您有四种选择来提供密码:
答案 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
是拥有要在其中执行脚本的数据库的角色,然后psql
在psql
将我加载到{ {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 安静