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

#1 29/04/2011 16:01:06

sweetasnz
Membre

pg_dump : pb avec index et contrainte

Bonjour,

je suis sur centos 2.6.18-164.15.1.el5.centos.plus x86_64
avec postgresql 8.4
j'utilise pg_dump pour sauvegarder ma base.
je viens de m'apercevoir qu'il ne me crée pas les lignes correspondantes aux contraintes de mes tables dans mon fichier de sortie

"contraint toto primary key (tat, titi)" n'ai pas créé dans le create table ... par exemple
et ensuite
"create unique index pepe on ma_table using btree (papa)" pour les index

il n'y a pas non plus d'option pour le forcer ...
voici ma ligne  :
pg_dump ma_base >> ma_sortie.sql

si qq un a plus d'info,
merci

Hors ligne

#2 29/04/2011 16:14:27

sweetasnz
Membre

Re : pg_dump : pb avec index et contrainte

je rajouterai autre chose :
lors de la création de mes tables par pg_dump, j'ai la ligne  :

create table schema1.table1 ( .....)   qui est créée

alors que dans ma base en production, j'ai simplement

create table table1 ( .... )

ce qui me posera pb lors des requêtes si j'ai à restaurer ce dump ...

je me demande si pg_dump est vraiment le meilleur outil de sauvegarde ...

Dernière modification par sweetasnz (29/04/2011 16:15:10)

Hors ligne

#3 29/04/2011 16:22:34

Marc Cousin
Membre

Re : pg_dump : pb avec index et contrainte

CREATE TABLE test (a int primary key, b int not null check (b>1));
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"
CREATE TABLE


CREATE TABLE test2 (a int, foreign key(a) references test(a));
CREATE TABLE


pg_dump marc
--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: marc
--

CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql;


ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO marc;

SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: test; Type: TABLE; Schema: public; Owner: marc; Tablespace: 
--

CREATE TABLE test (
    a integer NOT NULL,
    b integer NOT NULL,
    CONSTRAINT test_b_check CHECK ((b > 1))
);


ALTER TABLE public.test OWNER TO marc;

--
-- Name: test2; Type: TABLE; Schema: public; Owner: marc; Tablespace: 
--

CREATE TABLE test2 (
    a integer
);


ALTER TABLE public.test2 OWNER TO marc;

--
-- Data for Name: test; Type: TABLE DATA; Schema: public; Owner: marc
--

COPY test (a, b) FROM stdin;
\.


--
-- Data for Name: test2; Type: TABLE DATA; Schema: public; Owner: marc
--

COPY test2 (a) FROM stdin;
\.


--
-- Name: test_pkey; Type: CONSTRAINT; Schema: public; Owner: marc; Tablespace: 
--

ALTER TABLE ONLY test
    ADD CONSTRAINT test_pkey PRIMARY KEY (a);


--
-- Name: test2_a_fkey; Type: FK CONSTRAINT; Schema: public; Owner: marc
--

ALTER TABLE ONLY test2
    ADD CONSTRAINT test2_a_fkey FOREIGN KEY (a) REFERENCES test(a);


--
-- Name: public; Type: ACL; Schema: -; Owner: marc
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM marc;
GRANT ALL ON SCHEMA public TO marc;
GRANT ALL ON SCHEMA public TO PUBLIC;


--
-- PostgreSQL database dump complete
--

Il va nous falloir un cas de test. Parce que les contraintes que j'ai créées sont dans le dump.

Dernière modification par Marc Cousin (29/04/2011 16:22:53)


Marc.

Hors ligne

#4 29/04/2011 17:06:24

sweetasnz
Membre

Re : pg_dump : pb avec index et contrainte

autant pour moi les ALTER .. CONSTRAINT sont bien présents (j'aurais du regarder dans les logs avant de m'enflammer...  neutral),
en reprenant votre test ,
je viens de voir que c'est un pb qui survient à cause de mon 2eme post (voir plus haut)

en fait le pg_dump me crée le table "schema1.table1" et non pas "table1" tout court :

table d'origine dans ma base en prod :
CREATE TABLE table1 (toto int);
ALTER TABLE ONLY table1
    ADD CONSTRAINT tab1_pkey PRIMARY KEY (toto);

ici tout va bien

table dans le pg_dump :
CREATE TABLE schema1.table1 (toto int);
ALTER TABLE ONLY table1
    ADD CONSTRAINT tab1_pkey PRIMARY KEY (toto);

et donc le message
ERREUR: la relation « table1 » n'existe pas

lors de la restauration ...

Hors ligne

#5 29/04/2011 17:17:16

Marc Cousin
Membre

Re : pg_dump : pb avec index et contrainte

Dans le script de restauration, il y a des commandes set search_path, qui s'occupent de positionner le schéma correctement pour les commandes sans schéma.

Si par exemple, je déplace test2 dans schema2, dans mon dump, j'ai :

SET search_path = schema2, pg_catalog;

--
-- Name: test2_a_fkey; Type: FK CONSTRAINT; Schema: schema2; Owner: marc
--

ALTER TABLE ONLY test2
    ADD CONSTRAINT test2_a_fkey FOREIGN KEY (a) REFERENCES public.test(a);

Marc.

Hors ligne

Pied de page des forums