如何使用URI通过命令行将sql文件放入postgresql数据库中?

yacmzcpb  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(153)

我写了一个sql文件,里面有一些我想在我的数据库中做的插入。
这里有一个例子,它是由什么组成的:

-- User
INSERT INTO users (user_id, credit, email, passwd, alias_login, user_id) 
VALUES (1, 250, 'test@test.com', '123456', '1111', 'admin');

我还写了一个批处理脚本,它安装我的数据库之前,我想在安装后,把一些数据里面与此批处理脚本内的SQL脚本。
我已经探索了所有的选项,为了完全自动化,我需要使用字符串连接到我的数据库,以避免像这样输入密码:

C:\PROGRA~1\PostgreSQL\15.2\bin\psql.exe "postgres://mydbadmin:mydbadminpasswd@localhost:5432/mydb"

但是我想输入的是我的sql脚本,考虑到这个字符串方法,我不能使用-f选项或任何-c "\i..."的东西。它只是忽略了命令。
我也试过这个,但根本不起作用:

type %cd%/myscript.sql | C:\PROGRA~1\PostgreSQL\15.2\bin\psql.exe "postgres://mydbadmin:mydbadminpasswd@localhost:5432/mydb"
lyfkaqu1

lyfkaqu11#

psql -c ***<command>***可以很好地使用连接字符串URL:

psql -d "postgresql://user:password@host/dbname" -c "SELECT 42"

 ?column? 
══════════
       42
(1 row)
piv4azn7

piv4azn72#

您可以使用PGPASSWORD environment variable.pgpass file(Windows上为pgpass.conf)。

使用PGPASSWORD

  • 在Linux上,你可以用途:
PGPASSWORD=mypassword psql -U myuser -f myscript.sql mydb

注意:您可能需要take measures so that it doesn't stay in your Bash history

  • 在Windows上(假设为cmd.exe):
SET PGPASSWORD=mypassword
C:\PROGRA~1\PostgreSQL\15.2\bin\psql.exe -U myuser -f myscript.sql mydb

使用pgpass

在Linux上,文件应为$HOME/.pgpass。在Windows上,它是%APPDATA%\postgresql\pgpass.conf
这是一个纯文本文件,格式如下:

hostname:port:database:username:password

例如:

localhost:5432:mydb:myuser:mypassword

相关问题