无法使用 GDAL ogr2ogr 远程连接到 postgres

cant connect to postgres with GDAL ogr2ogr remotely

我正在尝试通过 Gdal ogr2ogr 将 shapefile 插入 PostgreSQL,命令如下所示:

ogr2ogr -f 'PostgreSQL' PG:dbname='dbname',user='user',host='172.17.2.176',password='password',port='5432' shapefile -nln 'cities'

但是,ogr2ogr 似乎无法连接到位于单独 docker 容器中的 PosgreSQL。所有连接参数都正确,其他连接成功建立并使用相同的连接参数执行到同一 PostgreSQL 容器。 Laravel 迁移,在对这些表执行命令之前检查数据库和表是否存在的命令行 sql,以及使用 COPY 命令导入 csv 文件,所有 运行 成功地到单独的 PostgreSQL docker 容器使用与 ogr2ogr 命令中相同的连接参数。

当我 运行:

ogrinfo 'PostgreSQL' PG:dbname='dbname',user='user',host='172.17.2.176',password='password',port='5432'

我得到一个错误:"Unable to open datasource `PostgreSQL' with the following drivers..."

列出的驱动程序之一是“-> PostgreSQL”

这意味着 PostgreSQL 驱动程序已加载并启用? <- 一分迷惑

正在连接的用户具有超级用户权限,由官方 PostgreSQL docker 中的 .sh 脚本创建,图片在这里:https://github.com/docker-library/postgres/tree/master/9.4

据我对 google 和文档的研究所见和发现,一切都是正确的,应该可以正常工作..

超级用户权限、正确的数据库连接语法、加载的驱动程序……我缺少什么?这几天我一直在努力完成这项工作,我需要帮助。

连接字符串的语法很重要,尤其是在使用引号时。请参阅 PostgreSQL driver 以了解它应该是什么样子的示例。例如,尝试:

$ ogrinfo PG:"host=172.17.2.176 port=5432 user='user' password='password' dbname='dbname'"

一些有用的提示:

  • 如果经常连接这个数据库,可以use environment variables指定主机,端口,数据库名,and/or用户名。
  • password file 可用于避免在键入命令或在脚本中泄露密码。