无法连接到PostGIS数据库。

3

我有很多问题,但看起来这个过程似乎很简单。首先,一些背景信息:
Windows 10
QGIS 2.18.5
PgAdmin 4(v 2.0)
已安装Postgresql 10
-Postgresql数据库(托管在Amazon AWS云上运行的PostgreSQL 9.6.5)

我对postgresql和postgis非常陌生,但是在遵循所有基本说明后,我似乎无法在QGIS中查看任何sql表。以下是我的设置:
我在pgAdmin 4中登录为管理员(反正只有我一个用户),连接到我的Amazon AWS服务器并连接到我创建的新数据库。

我启用了postgis扩展(CREATE EXTENSION postgis;)和另外两个我认为可能需要的扩展...
目前为止都还好吧?

我有一个名为test_poly.shp的shapefile(在ArcCatalog中创建,有一个简单的形状和一个字符串字段),我想上传到我的数据库中,因此在与Postgresql捆绑的PostGIS Shapefile导入器中,我首先连接到我的数据库:

然后导入shapefile,手动输入27700作为SRID字段(英国国家网格)并将shapefile的“Shape”字段设置为Geo列(我应该这样做吗?什么是Geo列?)。我还将模式名称从“public”更改为我在pgAdmin中重命名的名称。

问题:1-Shapefile导入失败...

==============================
使用配置导入:test_poly,public,geom,D:\PostGIS\Test_poly.shp,mode=c,dump=1,simple=0,geography=0,index=1,shape=1,srid=0
Shapefile类型:多边形
PostGIS类型:MULTIPOLYGON[2]
Shapefile导入失败。

这里发生了什么?我尝试过更改一些选项,包括将Geo列中的输入更改为'geom',然后是'MULTIPOLYGON',然后是'POLYGON',再返回到'shape',将编码从UTF8更改为LATIN1...但都没有帮助。


这可能会对您有所帮助:https://gis.stackexchange.com/questions/41799/adding-shapefiles-to-postgis-database - Jacob H
嗨 Theo。几年前我也遇到了同样的问题,但使用 QGIS 的 shape 文件导入器就没问题了。 QGIS 扩展创建了一个基于 shapefile 的表格,其中存储了来自目录和几何的所有记录。相当方便;-) - Jim Jones
@JacobH 所以我以管理员身份打开CMD提示符,将目录更改为我的PostgreSQL\10\bin文件夹,然后运行命令行,但是出现了以下错误信息:“shp2pgsl”不被识别为内部或外部命令、可执行程序或批处理文件。 - Theo F
1个回答

0
根据您的需求,将几何图形导入到PostGIS的一种好方法是使用QGIS中的Import into PostGIS工具。 只需进入工具箱(高级界面)并搜索Import into Postgis。对话框非常简单明了(需要事先连接到数据库)...

enter image description here

基于这个shapefile,它创建了以下表结构(已在QGIS 2.8.6-Wien中测试):

CREATE TABLE public."tm_world_borders_simpl-0.3"
(
  id integer NOT NULL DEFAULT nextval('"tm_world_borders_simpl-0.3_id_seq"'::regclass),
  geom geometry(MultiPolygon,4326),
  fips character varying(2),
  iso2 character varying(2),
  iso3 character varying(3),
  un integer,
  name character varying(50),
  area integer,
  pop2005 integer,
  region integer,
  subregion integer,
  lon double precision,
  lat double precision,
  CONSTRAINT "tm_world_borders_simpl-0.3_pkey" PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public."tm_world_borders_simpl-0.3"
  OWNER TO disco2;

-- Index: public."sidx_tm_world_borders_simpl-0.3"

-- DROP INDEX public."sidx_tm_world_borders_simpl-0.3";

CREATE INDEX "sidx_tm_world_borders_simpl-0.3"
  ON public."tm_world_borders_simpl-0.3"
  USING gist
  (geom);

导入shapefile的另一个PostGIS扩展是SPIT,但它已不再维护,并且在处理MultiPolygons时可能会出现问题。还有其他替代方案

编辑 如何使用QGIS添加新的PostGIS连接:

转到添加PostGIS图层并单击新建

enter image description here

输入您的数据库地址和凭据,然后单击确定

enter image description here


谢谢您的建议,但它要求您已经连接到数据库。我无法连接到它-在QGIS中连接到它之前,数据库需要已经导入了一个图层。但问题是:我无法添加图层! - Theo F
不需要。只需转到“添加PostGIS图层”,并添加您的PostGIS数据库的地址和凭据即可。您无需在那里先有几何图形才能连接到数据库,您只需要先安装扩展程序即可。 - Jim Jones
刚刚添加了几张截图,也许可以帮助你。 - Jim Jones
嗨Jim,谢谢你,但我已经做了所有的事情。我仍然无法连接。在DB Manager中,我尝试连接,但是我得到了一个Python错误: TypeError: 'NoneType'对象没有属性'getitem'。 - Theo F
我可以使用离线的本地数据库成功导入文件。但是问题似乎出现在我的有问题的数据库在亚马逊AWS托管中... - Theo F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,