0

嗨,我对 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 个表中的任何一个进行更改,并将新更改覆盖旧更改。

4

1 回答 1

1

该查询甚至与您认为的不一样。INHERITS 会覆盖其中一个表中的列名,并且您正在交叉连接 9 个表。无论如何,选择语句中的 INHERITS 似乎完全没有记录,因此它可能是错误或功能,或者只是未定义的行为。

摆脱 INHERITS 子句并在 FROM 子句中添加 UNION 而不是隐式交叉连接。

SELECT * FROM data."WC"
UNION ALL
SELECT * FROM data."NW"
....
于 2013-11-13T08:07:34.437 回答