Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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... ),
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
Pages : 1