簡體   English   中英

PostgreSQL-錯誤:SQL狀態:XX000

[英]PostgreSQL - Error: SQL state: XX000

我在Postgres中有一張桌子,看起來像這樣:

CREATE TABLE "Population"
(
  "Id" bigint NOT NULL DEFAULT nextval('"population_Id_seq"'::regclass),
  "Name" character varying(255) NOT NULL,
  "Description" character varying(1024),
  "IsVisible" boolean NOT NULL
  CONSTRAINT "pk_Population" PRIMARY KEY ("Id")
)
WITH (
  OIDS=FALSE
);

選擇函數如下所示:

CREATE OR REPLACE FUNCTION "Population_SelectAll"()
  RETURNS SETOF "Population" AS
$BODY$select
  "Id",
  "Name",
  "Description",
  "IsVisible"
from "Population";
$BODY$
  LANGUAGE 'sql' STABLE
  COST 100

調用select函數將按預期返回表中的所有行。

我需要在表中添加幾列(這兩列都是數據庫中其他表的外鍵)。 這給了我一個新的表def,如下所示:

CREATE TABLE "Population"
(
  "Id" bigint NOT NULL DEFAULT nextval('"population_Id_seq"'::regclass),
  "Name" character varying(255) NOT NULL,
  "Description" character varying(1024),
  "IsVisible" boolean NOT NULL,
  "DefaultSpeciesId" bigint NOT NULL,
  "DefaultEcotypeId" bigint NOT NULL,
  CONSTRAINT "pk_Population" PRIMARY KEY ("Id"),
  CONSTRAINT "fk_Population_DefaultEcotypeId" FOREIGN KEY ("DefaultEcotypeId")
      REFERENCES "Ecotype" ("Id") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT "fk_Population_DefaultSpeciesId" FOREIGN KEY ("DefaultSpeciesId")
      REFERENCES "Species" ("Id") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);

和功能:

CREATE OR REPLACE FUNCTION "Population_SelectAll"()
  RETURNS SETOF "Population" AS
$BODY$select
  "Id",
  "Name",
  "Description",
  "IsVisible",
  "DefaultSpeciesId",
  "DefaultEcotypeId"
from "Population";
$BODY$
  LANGUAGE 'sql' STABLE
  COST 100
  ROWS 1000;

這些更改后調用該函數將導致以下錯誤消息:

ERROR: could not find attribute 11 in subquery targetlist
SQL state: XX000

是什么導致此錯誤,我該如何解決? 我試圖刪除並重新創建列和函數-但發生相同的錯誤。

平台是Windows Server上運行的PostgreSQL 8.4。 謝謝。

您是否刪除並重新創建了功能? 順便說一下,您一定喜歡Postgres的用戶友好程度。 您還會擁抱和親吻(XXOOO)哪個其他數據庫作為錯誤狀態?

當我看到過去類似的情況時,這是因為數據庫連接緩存了某些函數屬性。 因此,如果我使用的是pgAdmin,則必須關閉SQL編輯器窗口並建立一個新連接,以使該功能正常工作。 如果尚未安裝,請確保在新的數據庫連接上測試該功能。

我認為該問題已在PostgreSQL的幾個版本中解決,但值得嘗試。

為我找到了一個更簡單的解決方案:創建數據庫的備份並從該備份中還原它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM