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.
Vous devez vous connecter pour publier un commentaire.
Avez-vous la suppression et recréation de la fonction?
Par la manière, vous allez adorer la façon conviviale Postgres est. Quelle autre base de données auriez-vous des câlins et des bisous(XXOOO) comme un état d'erreur?
Quand j'ai vu quelque chose de semblable dans le passé, c'était à cause de la connexion de base de données mise en cache de certains attributs des fonctions. Donc, si j'ai été en utilisant pgAdmin, j'ai dû fermer la fenêtre de l'éditeur de SQL et d'établir une nouvelle connexion pour obtenir la fonction fonctionne correctement. Si vous ne l'avez pas déjà fait, assurez-vous de tester la fonction sur nouvelle db connections.
Je pensais que le problème a été corrigé il y a quelques versions de PostgreSQL, mais il vaut la peine d'essayer.
Trouvé un peu plus facile pour moi la solution: une sauvegarde de la base de données et restauré à partir de cette sauvegarde.