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");

何らかの理由でそれを実行すると、それは永遠に実行されるように見えますが、1 つのテーブルでそれを試してみると実行されました (少し時間がかかりました) が、テーブルが表示されましたが、テストのテーブルに入ったときは作成された列を除くテーブル。

私が言ったように、私はpostgreSQLに比較的慣れていません。geoserver に入ると、geoserver はテストテーブルのみを読み取り、9 つのテーブルすべてを読み取るわけではありません。しかし、メインの geoserver テーブルが変更を取得し、新しい変更を古いものに上書きする 9 つのテーブルのいずれかを変更する必要がある場合。

4

1 に答える 1

1

そのクエリは、あなたが考えているものにさえ近づきません。INHERITS はテーブルの 1 つの列名をオーバーライドし、9 つのテーブルを相互にクロス結合しています。いずれにせよ、選択ステートメントの INHERITS は完全に文書化されていないように見えるため、バグまたは機能、または未定義の動作である可能性があります。

INHERITS 句を取り除き、FROM 句で暗黙的なクロス結合の代わりに UNION を追加します。

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