PostgreSQL 从 9 个表继承到 1 个表以在 geoserver 中读取
Posted
技术标签:
【中文标题】PostgreSQL 从 9 个表继承到 1 个表以在 geoserver 中读取【英文标题】:PostgreSQL Inherits from 9 tables to one table to read in geoserver 【发布时间】:2013-09-05 08:21:28 【问题描述】:您好,我对 PostgresSQL 非常陌生。
我创建了一些表并设法更改了表和列,但我似乎无法掌握其中的继承部分。
我一直在为这部分苦苦挣扎。
我创建了一个表,但发现我需要创建一个继承自其他 9 个表的表,并且当这 9 个其他表发生更改时,新创建的表也必须进行更改。
我已经尝试了几个步骤,但似乎要么错过了程序的重要部分,要么做错了。
我的步骤如下:
CREATE TABLE data."Test" (
"OID" integer,
"CMAID" integer,
"UpdateDate" timestamp without time zone,
"SG21CODE" character varying(21),
"ErfExtent" integer,
"ZoneBlocked" smallint,
"MunValue" integer,
"MunValueYear" integer,
"PurchasePrice" integer,
"PurchaseDate" timestamp without time zone,
"RegisteredDate" timestamp without time zone,
"ReportedSalePrice" integer,
"ReportedSaleDate" timestamp without time zone,
"BondHolder" character varying(32),
"BondAmount" bigint,
"DateIncluded" timestamp without time zone,
"SchemeNo" money,
geometry geometry(Geometry,3857),
"EUCat" text,
"UseCode" text,
"MUNCODE" text,
"SGUSAGE" text,
"ZoneDesc" text,
"Remainder" text,
"SiteOnly" text,
"RegStatus" text,
"Buyer" text,
"SaleStatus" text,
"SaleType" text,
"TitleDeed" text,
"PostCode" text,
"Address4" text,
"Address3" text,
"Address2" text,
"Address1" text,
"Ratepayer" text,
"OwnerIDNo" text,
"Owner" text,
"Zone" text,
"ErfUsage" text,
"Type" text,
"Suburb" text,
"SubSuburb" text,
"Complex" text,
"StreetName" text,
"Allotment" text,
"StreetNo" text,
"SchemeName" text,
"ErfNo" text,
version integer
);
SELECT *
FROM data."WC",data."NW",data."NC",data."MP",data."LP",data."KZN",data."GP",data."FS",data."EC"
INHERITS ("WC","NW","NC","MP","LP","KZN","GP","FS","EC");
由于某种原因,当我运行它时,它似乎永远在运行,但是当我用一张桌子运行它时(花了一点时间),但出现了桌子,尽管当我进入测试表时除了已创建的列之外,表中没有任何内容。
就像我说的,我对 postgreSQL 比较陌生。 看看它什么时候进入geoserver然后geoserver只读取测试表而不是所有9个表。但是,如果我需要对主地理服务器表在更改中提取的 9 个表中的任何一个进行更改,并将新更改覆盖旧更改。
【问题讨论】:
如果您是 PostgreSQL 新手(或者即使您不是),请避免使用表继承功能。它很复杂,会产生外键等问题,并且对于大多数应用程序来说不是必需的。 inherits() 在选择语句上?以前从未见过(去运行一些测试) 也放弃了数字货币类型。金钱有令人麻木的数字。 【参考方案1】:该查询甚至与您认为的不一样。 INHERITS 会覆盖其中一个表中的列名,并且您正在交叉连接 9 个表。无论如何,选择语句中的 INHERITS 似乎完全没有文档记录,因此它可能是错误或功能,或者只是未定义的行为。
去掉 INHERITS 子句并在 FROM 子句中添加 UNION 而不是隐式交叉连接。
SELECT * FROM data."WC"
UNION ALL
SELECT * FROM data."NW"
....
【讨论】:
以上是关于PostgreSQL 从 9 个表继承到 1 个表以在 geoserver 中读取的主要内容,如果未能解决你的问题,请参考以下文章