问题
我下面相对于方向in the GeoServer docs创造一个主键元数据表配置用于PK分配主键的元数据表中,但我无法分配的我的地理特征的主键(存储在PostGIS商店中)使用WFS-t请求中具有相同名称的属性的值。的GeoServer:使用的PostGIS商店
具体来说,我创建一个UUID客户端(这是必要的),然后将它作为WFS-t请求XML的'uuid'属性发送到GeoServer。一旦在GeoServer的手中,我希望该UUID被插入到几何表的主键列中,该列也被命名为'uuid'。而不是发生了什么,是的GeoServer自动创建其自己的主键,这东西看起来如下:
fid--46a202d5_15320520551_-7ffe
语境
这里是我的几何表的SQL:
CREATE TABLE test_points (uuid VARCHAR(60) PRIMARY KEY NOT NULL);
ALTER TABLE test_points ADD COLUMN title VARCHAR(30) NOT NULL;
ALTER TABLE test_points ADD COLUMN body TEXT NOT NULL;
SELECT AddGeometryColumn('public', 'test_points', 'geometry', '4326', 'POINT', 2);
这是我的主键元数据表 SQL,基本上与文档相同:
CREATE TABLE public.gt_pk_metadata_table (
table_schema VARCHAR(32) NOT NULL,
table_name VARCHAR(32) NOT NULL,
pk_column VARCHAR(32) NOT NULL,
pk_column_idx INTEGER,
pk_policy VARCHAR(32),
pk_sequence VARCHAR(64),
unique (table_schema, table_name, pk_column),
check (pk_policy in ('sequence', 'assigned', 'autoincrement'))
);
INSERT INTO gt_pk_metadata_table (
table_schema,
table_name,
pk_column,
pk_policy
) VALUES (
'public',
'test_points',
'uuid',
'assigned'
);
我有WFS-T插入操作正常工作(没有主键值),但这里是我的WFS-T请求XML的一个代表性的例子,在情况下,它可以帮助:
<Transaction xmlns="http://www.opengis.net/wfs" service="WFS" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Insert>
<test_points xmlns="my points">
<geometry>
<Point xmlns="http://www.opengis.net/gml" srsName="EPSG:3857">
<pos>-11828783.001187595 4559315.863154193</pos>
</Point>
</geometry>
<uuid>18984168-27cc-4fc8-8dea-bfbd39c42b22</uuid>
<title>A Perfect Example</title>
<body>Here's my body.</body>
</test_points>
</Insert>
</Transaction>
就我的GeoServer配置而言,在我正在使用的数据存储的配置页面上,我已启用“公开主键”标志,并且主键元数据表参数的值保留为空白(请参阅下面的其他值我试过了)
次尝试失败
下面是其他东西的清单我曾尝试:没有设置PRIMARY KEY
- 创建几何表
- 在'public'之外的模式中创建几何表,将主键元数据表保留在'公共'模式中
- 创建BO TH几何表,并在模式中的公钥元数据表大于“公共”
- 改变记录在主键元数据表使得在pk_column_idx列中的值为0
- 改变记录其它在主键元数据表使得在pk_column_idx列中的值为1
- 禁用“暴露主键”国旗在存储配置
- 在更改“主键元数据表”参数的值将配置存储到元数据的模式限定名称表
- 在存储配置到该元数据表
的NON -schema限定名更改“主键元数据表”参数的值中的每个这些改变之后我删除test_points层然后重新发布它。此外,我尝试删除并重新创建商店几次。
正如你所看到的,我有点绝望。任何帮助将非常感谢!
UPDATE:插入的GeoServer日志
好主意iant,我敢肯定,可以帮助!以下是插入过程中GeoServer记录内容的示例。除了idgen设置为GenerateNew,我认为这表明GeoServer认为它应该生成一个新的pk,这一切对我来说都很好。 但是,这是我使用GeoServer的第一个项目,所以这可能没有多大意义。头向上:UUID,标题,主体和几何体与上述XML示例不同。
2016-03-01 16:14:29,755 INFO [geoserver.gwc] - DataStoreChange:{/mypoints}test_points PreInsert
2016-03-01 16:14:29,760 INFO [geoserver.gwc] - DataStoreChange: {/mypoints}test_points PostInsert
2016-03-01 16:14:29,763 INFO [geoserver.wfs] -
Request: transaction
service = WFS
version = 1.1.0
baseUrl = http://127.0.0.1:8080/geoserver/
group[0] = wfs:[email protected] (feature: [SimpleFeatureImpl:test_points=[SimpleFeatureImpl.Attribute: uuid<uuid id=fid-4f745b22_1532fc9fb1c_-7ffa>=853596f8-9de1-477a-b287-f3cd114db90a, SimpleFeatureImpl.Attribute: title<title id=fid-4f745b22_1532fc9fb1c_-7ffa>=Another Test, SimpleFeatureImpl.Attribute: body<body id=fid-4f745b22_1532fc9fb1c_-7ffa>=For you!, SimpleFeatureImpl.Attribute: geometry<geometry id=fid-4f745b22_1532fc9fb1c_-7ffa>=POINT (-12044029.67283865 4265797.674539117)]], handle: null, idgen: <unset>, inputFormat: <unset>, srsName: null)
insert[0]:
feature[0] = SimpleFeatureImpl:test_points=[SimpleFeatureImpl.Attribute: uuid<uuid id=fid-4f745b22_1532fc9fb1c_-7ffa>=853596f8-9de1-477a-b287-f3cd114db90a, SimpleFeatureImpl.Attribute: title<title id=fid-4f745b22_1532fc9fb1c_-7ffa>=Another Test, SimpleFeatureImpl.Attribute: body<body id=fid-4f745b22_1532fc9fb1c_-7ffa>=For you!, SimpleFeatureImpl.Attribute: geometry<geometry id=fid-4f745b22_1532fc9fb1c_-7ffa>=POINT (-12044029.67283865 4265797.674539117)]
idgen = GenerateNew
inputFormat = text/xml; subtype=gml/3.1.1
releaseAction = ALL
插入无法设置FID时,日志文件中的内容是什么? –
感谢您的评论,只是添加服务器日志以上 – zsnyder
另外:我使用GeoServer(tomcat servlet)2.8-SNAPSHOT,从771e5c2e877b72961a7565c3b3ee62d9279aa39a提交建成。如果有帮助...... – zsnyder