PostgreSQL - Erreur: état SQL: XX000

J'ai un tableau dans Postgresql qui ressemble à ceci:

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

Et une fonction de sélection qui ressemble à ceci:

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

L'appel de la fonction select renvoie toutes les lignes de la table comme prévu.

J'ai besoin d'ajouter un couple de colonnes de la table (les deux sont des clés étrangères pour autres tables dans la base de données). Cela me donne une nouvelle table def comme suit:

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

et de la fonction:

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;

L'appel de la fonction après ces résultats de modifications dans le message d'erreur suivant:

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

Ce qui est à l'origine de cette erreur et comment la corriger? J'ai essayé de supprimer et recréer les colonnes et la fonction - mais la même erreur se produit.

Plate-forme de PostgreSQL 8.4 en cours d'exécution sur Windows Server. Merci.

  • avez-vous remplir la "Population"."DefaultSpeciesId" et".DefaultEcotypeId" colonnes avec des données après l'ajout d'eux?
  • oui, j'ai ajouté les colonnes, ajouter un peu de valeurs existant pour les lignes de la table, puis l'installation de la "not null" et fk contraintes sur eux.
InformationsquelleAutor rob | 2010-03-15