PostgreSQL-错误:SQL状态:XX000

rob*_*rob 2 sql postgresql

我在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
);
Run Code Online (Sandbox Code Playgroud)

选择函数如下所示:

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

调用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
);
Run Code Online (Sandbox Code Playgroud)

和功能:

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;
Run Code Online (Sandbox Code Playgroud)

这些更改后调用该函数将导致以下错误消息:

ERROR: could not find attribute 11 in subquery targetlist
SQL state: XX000
Run Code Online (Sandbox Code Playgroud)

是什么导致此错误,我该如何解决?我试图删除并重新创建列和函数-但发生相同的错误。

平台是Windows Server上运行的PostgreSQL 8.4。谢谢。

Sco*_*ley 5

您是否删除并重新创建了功能?顺便说一下,您一定喜欢Postgres的用户友好程度。您还会拥抱和亲吻(XXOOO)哪个其他数据库作为错误状态?

  • 我喜欢你的 XXOOO 评论。 (4认同)
  • 是的,尝试过-不高兴。不应在同一句子中同时使用“用户友好”和“ Postgres”两个词:p (3认同)