0

我的问题不是针对 PostgreSQL 9.6,但 PostgreSQL 9.6 是我正在尝试运行的软件,所以我将使用它作为我的示例。我也在 Windows 10 上运行。

编辑: Magoo 给出了一个非常具体的 PostgreSQL 答案。如果其他人可以给出更通用的答案,那么我将更改哪个是该答案的公认答案。

我在批处理文件中运行以下代码:

@echo off
SET/P file=Select file:
@echo on
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file1]
"%~dp0\osm2pgsql-bin\osm2pgsql.exe" --slim --drop --latlong --keep-coastlines --multi-geometry --hstore -S [file2] --tag-transform-script [file3] -W -U gisuser -H [IP adress] -d [databasename] "%file%"
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file4]
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file5]
"%~dp0\psql.exe" -W -h [IP adress] -d [databasename] -U [username] -f [file6]
@echo off
pause
@echo on

(括号内的所有内容都是硬编码值。)

何时psql.exeosm2pgsql.exe开始他们提示输入密码。这本身很好,但是随着它们多次运行,它会迫使用户多次输入密码。osm2pgsql 也是一个需要很长时间的过程,因此用户必须在两次之间等待才能输入密码。

我想要做的是提示用户输入一次密码,然后在 psql.exe 和 osm2pgsql.exe 在提示输入密码时运行时自动输入该密码。

我试过这个没有成功:https ://stackoverflow.com/a/43896549/7398644


出于好奇,上面的代码应该是在 PostgreSQL 数据库中 DROP CASCADE 多个表(file1 中的 SQL 代码),然后从 OpenStreetMap 数据中重新创建这些表,最后在同一个数据库中创建多个视图(SQL 代码在文件 4、5 和 6 中)。

4

2 回答 2

0

一种可能性是使用像 Autoit 或 Autohotkey 这样的脚本语言。

> 自动

AutoIt v3 是一种类似 BASIC 的免费软件脚本语言,旨在自动化 Windows GUI 和一般脚本。它结合了模拟击键、鼠标移动和窗口/控件操作,以便以其他语言(例如 VBScript 和 SendKeys)不可能或不可靠的方式自动执行任务。AutoIt 也非常小,是独立的,可以在所有版本的 Windows 上开箱即用地运行,不需要烦人的“运行时”!

>

您可以创建一个脚本,该脚本从您的批处理开始并在后台等待特定的窗口对话框(密码对话框)如果识别出该对话框,您可以要求输入密码,将其存储在变量中并自动填写所有后续的对话调用。

于 2017-05-21T01:58:18.700 回答
0

从关于 psql.exe 的命令行执行的 PostgreSQL 页面

-w --无密码

永远不要发出密码提示。如果服务器需要密码验证并且密码不能通过其他方式(例如 .pgpass 文件)获得,则连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中很有用。

请注意,此选项将在整个会话中保持设置,因此它会影响元命令 \connect 的使用以及初始连接尝试。

所以,我建议一个 .pgpass 文件是要走的路......

于 2017-05-16T09:18:32.033 回答