2016-03-01 64 views
2

问题

我下面相对于方向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

  • 创建具有类型UUID的主键列几何表

    • 创建几何表
    • 在'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 
    
  • +0

    插入无法设置FID时,日志文件中的内容是什么? –

    +0

    感谢您的评论,只是添加服务器日志以上 – zsnyder

    +0

    另外:我使用GeoServer(tomcat servlet)2.8-SNAPSHOT,从771e5c2e877b72961a7565c3b3ee62d9279aa39a提交建成。如果有帮助...... – zsnyder

    回答

    0

    添加fid="your_target_id"属性特征和属性idgen="UseExisting"wfs:Insert让我分配一个UUID。

    Here's我可以在idgen上找到最好的文档。我不清楚WFS 1.0.0和2.0.0中的类似物。