Nodejs -尝试执行postgre sql文件

jucafojl  于 12个月前  发布在  Node.js
关注(0)|答案(3)|浏览(124)

我尝试通过nodejs运行以下命令:
第一个月
但我在控制台中得到了以下提示:
用户postgres的密码:
我试着通过参数变量设置密码,像这样:
SET PGPASSWORD=mypassword && psql -U postgres -d dbName -f import.sql
但由于某种原因,我得到了以下错误:
psql:error:connection to server at“localhost”(::1),port 5432 failed:FATAL:password authentication failed for user“postgres”
我三次检查,这是正确的密码,我也试图改变密码使用的东西没有任何特殊字符,怀疑编码问题,但仍然失败。
然后我尝试了node-postgres,像这样:

const file = (await readFile("./download/import.sql")).toString();

const pool = new Pool({
  user: "postgres",
  host: "localhost",
  database: "dbName",
  password: "myPassword",
  port: 5432,
});

await pool.query(file);

字符串
但它失败了,因为我的脚本包含这样的行:\copy tableA from 'db/tableA',我不知道如何解决这个问题。
接下来,我尝试使用spawn,如下所示:

const child = spawn("psql", ["-h", "localhost", "-U", "postgres", "-d", "dbName", "-f", "./download/import.sql"]);

child.stdin.write("myPassword");
child.stdin.end();


但我仍然可以看到要求输入密码的提示。
我不知道了
编辑:我使用Windows

lvmkulzt

lvmkulzt1#

PostgreSQL/ libpq有一个特性,允许您将psql使用的凭据放在特定的“.pgpass”文件中
cf https://www.postgresql.org/docs/current/libpq-pgpass.html
这可以帮助您在文件系统上创建具有特定用户权限的文件。
根据项目和凭证所需的安全性,我建议您

  • 在使用前创建文件,并在psql操作完成后删除
  • 创建一个特定的postgres角色/用户为这个任务与受约束的权利.这个用户可以被创建/删除之前和之后这操作

请注意文档中的说明,否则它将无法工作:
在Unix系统上,密码文件的权限必须禁止对world或group的任何访问;可以通过chmod 0600 ~/. pgpass这样的命令来实现这一点。如果权限不那么严格,则该文件将被忽略。在Microsoft Windows上,假定该文件存储在安全的目录中,因此不进行特殊的权限检查。

cgvd09ve

cgvd09ve2#

如果您使用的密码是正确的,并且当您在提示符下输入密码时psql命令可以工作,那么问题可能是PGPASSWORD设置不正确。
在命令行中,尝试(no SET,no &&):
PGPASSWORD='mypassword' psql -U postgres -d dbName -f import.sql
这是我传递一个临时环境变量给脚本的常用方法。2如果你的密码中有单引号,这可能需要更多的转义。

vwhgwdsa

vwhgwdsa3#

我找到解决办法了!
如果我使用连接字符串进行连接,它就可以工作:

execSync(`psql -f ./download/import.sql "postgresql://postgres:myPassword@localhost/dbName"`);

字符串
格式:postgresql://<username>:<password>@<server>/<db>

相关问题