Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#26 Re : PgAdmin3 » transfer postgresql/pgAmin3 database from an old hard drive -no backup » 30/07/2014 22:47:11
Did you verify your pg_hba.conf file and try option -A ... with initdb ?
#27 Général » Contrainte Foreign Key impossible sans préciser le nom de la clé » 30/07/2014 22:24:04
- PmGs7
- Réponses : 2
Bonjour,
J'ai 2 tables contenant chacune 1 enregistrement avec un champ identique et ... je n'arrive pas à créer une contrainte Foreign Key sans être obligé de spécifier le champ identique ! ?
Si un lecteur veut bien reproduire ces erreurs et si possible m'éclairer, je le remercie d'avance.
PmG
Version utilisée : Postgresql 9.1
-----Les erreurs ---------------------------------------------------
ALTER TABLE noms ADD CONSTRAINT noms_id_ville FOREIGN KEY (id_ville) REFERENCES villes MATCH FULL ON UPDATE CASCADE;
ERREUR: une instruction insert ou update sur la table « noms » viole la contrainte de clé
étrangère « noms_id_ville »
DÉTAIL : La clé (id_ville)=(idv1) n'est pas présente dans la table « villes ».
ALTER TABLE noms2 ADD CONSTRAINT noms2_id_ville FOREIGN KEY (id_ville) REFERENCES villes2 MATCH FULL ON UPDATE CASCADE;
ERREUR: il n'existe pas de clé étrangère pour la table « villes2 » référencée
-----La solution --------------------------------------------------------------
...........REFERENCES villes (id_ville) ..................
-----La question -------------------------------------------------------------
Pourquoi, sur cette exemple, je dois préciser id_ville sachant que ce champ est identique dans les 2 tables ?
-----Le dump de la base ----------------------------------------------------
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = false;
CREATE TABLE noms (
id_nom character varying(64) NOT NULL,
id_ville character varying(8)
);
CREATE TABLE villes (
insee character varying(5) NOT NULL,
id_ville character varying(8)
);
COPY noms (id_nom, id_ville) FROM stdin;
nn_pp idv1
\.
COPY villes (insee, id_ville) FROM stdin;
123 idv1
\.
ALTER TABLE ONLY noms
ADD CONSTRAINT noms_pkey PRIMARY KEY (id_nom);
ALTER TABLE ONLY villes
ADD CONSTRAINT villes_pkey PRIMARY KEY (insee);
CREATE UNIQUE INDEX ville_ide ON villes USING btree (id_ville);
CREATE TABLE noms2 (
id_nom character varying(64) NOT NULL,
id_ville character varying(8)
);
CREATE TABLE villes2 (
id_ville character varying(8)
);
COPY noms2 (id_nom, id_ville) FROM stdin;
nn_pp idv1
\.
COPY villes2 (id_ville) FROM stdin;
idv1
\.
ALTER TABLE ONLY noms2
ADD CONSTRAINT noms2_pkey PRIMARY KEY (id_nom);
CREATE UNIQUE INDEX ville2_ide ON villes2 USING btree (id_ville);
REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;