繁体   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