Vous n'êtes pas identifié(e).

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

Pied de page des forums

Propulsé par FluxBB