PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#2 Général » [résolu] pg_dump -t avec séquence ! » 13/09/2023 09:31:02

PmGs7
Réponses : 2

Bonjour à tous,


Normalement "pg_dump -t" ne dump que la table, en particulier sans la séquence éventuellement associée.

Lorsque je crée une table avec le sql suivant, le dump contient la séquence ! ?
Je ne vois aucune différence dans la structure de ma table par rapport à d'autres tables dont le dump ne contient pas la séquence.
Un lecteur a-t-il une explication? Un test/une vérification complémentaire à effectuer?

Merci d'avance


-- database version 12.15 (Ubuntu 12.15-0ubuntu0.20.04.1)
-- pg_dump version 12.15 (Ubuntu 12.15-0ubuntu0.20.04.1)

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
SET default_tablespace = '';
SET default_table_access_method = heap;

CREATE TABLE public.t0 (
    id bigint NOT NULL
);

CREATE SEQUENCE public.t0_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

ALTER SEQUENCE public.t0_id_seq OWNED BY public.t0.id;

ALTER TABLE ONLY public.t0 ALTER COLUMN id SET DEFAULT nextval('public.t0_id_seq'::regclass);

SELECT pg_catalog.setval('public.t0_id_seq', 1, false);

ALTER TABLE ONLY public.t0
    ADD CONSTRAINT t0_pkey PRIMARY KEY (id);

#3 Re : Général » Résolu - Comment limiter le nombre d'exécution d'un trigger? » 25/07/2022 11:46:19

Merci pour pg_trigger_depth() , je ne connaissais pas, c'est exactement ce qu'il me faut.

#4 Général » Résolu - Comment limiter le nombre d'exécution d'un trigger? » 25/07/2022 11:16:27

PmGs7
Réponses : 4

J'ai écris un trigger qui maj un nouvel enregistrement de la table initiale.


CREATE OR REPLACE FUNCTION update() RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
  _idn INTEGER;
BEGIN
        SELECT id INTO _idn FROM table WHERE ...;
        IF ( _idn > 0 ) THEN
                UPDATE my_table SET ... WHERE id=_idn;
        END IF;
        RETURN NULL;
END
$$;

CREATE TRIGGER my_trigger
   AFTER UPDATE
   ON my_table
   FOR EACH ROW
       EXECUTE PROCEDURE update();


Quand je mets à jour le premier energistremnt, le trigger cherche à maj tous les enregistrements concernés et j'obtiens l'erreur "stack depth limit exceeded"

Augmenter cette limite n'est pas une solution, ma table est amener à grossir.

Mais I j'ai jamais besoin de maj le premier enregistrement et je souhaite simplement limiter le nombre de boucles du trigger.


Je ne sais pas comment gérer un compteur de boucles et je n'ai rien trouvé qui me permette de lire l'usage réelle de la pile, ce qui serait une autre solution.


Toute idée est la bienvenue.

Merci d'avance.

#5 Re : Général » Résolu - pg_dump d'une table - pas clair : avec ou sans séquence? » 15/06/2022 09:35:49

"ça n'a vraiment aucune importance)"

A titre personnel je trouve que c'est mieux pour les 2 profils, ceux qui recherchent de l'aide ou ceux qui  souhaitent en apporter.

#6 Re : Général » Résolu - pg_dump d'une table - pas clair : avec ou sans séquence? » 15/06/2022 09:17:30

Merci @rjuju et @gleu

j'ai compris la raison "la sequence pour t1 n'est pas une dépendance mais une "extension" de la table"

C'est clair, mais en l'occurrence la doc, selon moi, l'est moins car n'évoque pas ce comportement différent entre "extension" et dépendance.

Comment cloture-t-on un sujet sur ce forum?

#7 Re : Général » Résolu - pg_dump d'une table - pas clair : avec ou sans séquence? » 15/06/2022 07:42:11

Bonjour,


Merci pour votre réponse.


La cmd pour générées les dump est la "standard" à savoir :

    pg_dump mabase
    pg_dump -t t1 mabase
    pg_dump -t t2 mabase


La doc est celle de la version 11
    https://www.postgresql.org/docs/11/app-pgdump.html
Note
When -t is specified, pg_dump makes no attempt to dump any other database objects that the selected table(s) might depend upon.


Le dump de t1 n'est, selon moi, pas conforme à la doc.

Ce n'est pas un pb majeur, mais ennuyeux/plus compliqué pour réaliser un script.


PS : il semble que la différence de comportement soit liée à la différence de codage du "default" dans la séquence ( t1 : "alter" sur la table créée, t2 : directement avec la création de la table)

#8 Général » Résolu - pg_dump d'une table - pas clair : avec ou sans séquence? » 14/06/2022 22:56:06

PmGs7
Réponses : 9

Bonjour,
Je bute ce soir sur un problème que je n'arrive pas à expliquer.

J'ai une base avec 2 tables t1 et t2 presque identiques, comportant chacune une séquence et une seule ligne de donnée.

Le dump de la base est correct.

Le dump de la table t1 est complet (avec séquence, le dump permet de recréer cette table dans une autre base), ce qui n'est pas conforme à la doc

Le dump de la table t2 est confrome à la doc, cad sans la séquence.

Je mets ci-dessous les 3 dumps, si un lecteur a un peu de temps, j'apprécierais qu'il utilise le 1er sur son serveur t voit s'il reproduit le pb.

Par ailleurs je suis à la recherche de toute idée pour approfondir et comprendre.

Merci d'avance.

------------------------------------------ dump base
-
-- PostgreSQL database dump
--

-- Dumped from database version 11.14 (Debian 11.14-0+deb10u1)
-- Dumped by pg_dump version 11.14 (Debian 11.14-0+deb10u1)

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: t1; Type: TABLE; Schema: public; Owner: PmGs
--

CREATE TABLE public.t1 (
    id bigint NOT NULL,
    name character varying(255) NOT NULL,
    created_at timestamp(0) without time zone,
    updated_at timestamp(0) without time zone
);


ALTER TABLE public.t1 OWNER TO PmGs;

--
-- Name: t1_id_seq; Type: SEQUENCE; Schema: public; Owner: PmGs
--

CREATE SEQUENCE public.t1_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE public.t1_id_seq OWNER TO PmGs;

--
-- Name: t1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: PmGs
--

ALTER SEQUENCE public.t1_id_seq OWNED BY public.t1.id;


--
-- Name: t2_id_seq; Type: SEQUENCE; Schema: public; Owner: PmGs
--

CREATE SEQUENCE public.t2_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE public.t2_id_seq OWNER TO PmGs;

--
-- Name: t2; Type: TABLE; Schema: public; Owner: PmGs
--

CREATE TABLE public.t2 (
    id bigint DEFAULT nextval('public.t2_id_seq'::regclass) NOT NULL,
    name character varying(32),
    created_at timestamp without time zone DEFAULT now(),
    updated_at timestamp without time zone
);


ALTER TABLE public.t2 OWNER TO PmGs;

--
-- Name: t1 id; Type: DEFAULT; Schema: public; Owner: PmGs
--

ALTER TABLE ONLY public.t1 ALTER COLUMN id SET DEFAULT nextval('public.t1_id_seq'::regclass);


--
-- Data for Name: t1; Type: TABLE DATA; Schema: public; Owner: PmGs
--

COPY public.t1 (id, name, created_at, updated_at) FROM stdin;
1    Admin    2022-06-11 20:28:33    2022-06-11 20:28:33
\.


--
-- Data for Name: t2; Type: TABLE DATA; Schema: public; Owner: PmGs
--

COPY public.t2 (id, name, created_at, updated_at) FROM stdin;
1    xxx    \N    \N
\.


--
-- Name: t1_id_seq; Type: SEQUENCE SET; Schema: public; Owner: PmGs
--

SELECT pg_catalog.setval('public.t1_id_seq', 1, true);


--
-- Name: t2_id_seq; Type: SEQUENCE SET; Schema: public; Owner: PmGs
--

SELECT pg_catalog.setval('public.t2_id_seq', 31, true);


--
-- Name: t1 t1_pkey; Type: CONSTRAINT; Schema: public; Owner: PmGs
--

ALTER TABLE ONLY public.t1
    ADD CONSTRAINT t1_pkey PRIMARY KEY (id);


--
-- Name: t2 t2_pkey; Type: CONSTRAINT; Schema: public; Owner: PmGs
--

ALTER TABLE ONLY public.t2
    ADD CONSTRAINT t2_pkey PRIMARY KEY (id);


--
-- PostgreSQL database dump complete
--

---------------------------------- dump table t1
--
-- PostgreSQL database dump
--

-- Dumped from database version 11.14 (Debian 11.14-0+deb10u1)
-- Dumped by pg_dump version 11.14 (Debian 11.14-0+deb10u1)

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: t1; Type: TABLE; Schema: public; Owner: PmGs
--

CREATE TABLE public.t1 (
    id bigint NOT NULL,
    name character varying(255) NOT NULL,
    created_at timestamp(0) without time zone,
    updated_at timestamp(0) without time zone
);


ALTER TABLE public.t1 OWNER TO PmGs;

--
-- Name: t1_id_seq; Type: SEQUENCE; Schema: public; Owner: PmGs
--

CREATE SEQUENCE public.t1_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE public.t1_id_seq OWNER TO PmGs;

--
-- Name: t1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: PmGs
--

ALTER SEQUENCE public.t1_id_seq OWNED BY public.t1.id;


--
-- Name: t1 id; Type: DEFAULT; Schema: public; Owner: PmGs
--

ALTER TABLE ONLY public.t1 ALTER COLUMN id SET DEFAULT nextval('public.t1_id_seq'::regclass);


--
-- Data for Name: t1; Type: TABLE DATA; Schema: public; Owner: PmGs
--

COPY public.t1 (id, name, created_at, updated_at) FROM stdin;
1    Admin    2022-06-11 20:28:33    2022-06-11 20:28:33
\.


--
-- Name: t1_id_seq; Type: SEQUENCE SET; Schema: public; Owner: PmGs
--

SELECT pg_catalog.setval('public.t1_id_seq', 1, true);


--
-- Name: t1 t1_pkey; Type: CONSTRAINT; Schema: public; Owner: PmGs
--

ALTER TABLE ONLY public.t1
    ADD CONSTRAINT t1_pkey PRIMARY KEY (id);


--
-- PostgreSQL database dump complete
--

---------------------------- dump table t2
--
-- PostgreSQL database dump
--

-- Dumped from database version 11.14 (Debian 11.14-0+deb10u1)
-- Dumped by pg_dump version 11.14 (Debian 11.14-0+deb10u1)

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: t2; Type: TABLE; Schema: public; Owner: PmGs
--

CREATE TABLE public.t2 (
    id bigint DEFAULT nextval('public.t2_id_seq'::regclass) NOT NULL,
    name character varying(32),
    created_at timestamp without time zone DEFAULT now(),
    updated_at timestamp without time zone
);


ALTER TABLE public.t2 OWNER TO PmGs;

--
-- Data for Name: t2; Type: TABLE DATA; Schema: public; Owner: PmGs
--

COPY public.t2 (id, name, created_at, updated_at) FROM stdin;
1    xxx    \N    \N
\.


--
-- Name: t2 t2_pkey; Type: CONSTRAINT; Schema: public; Owner: PmGs
--

ALTER TABLE ONLY public.t2
    ADD CONSTRAINT t2_pkey PRIMARY KEY (id);


--
-- PostgreSQL database dump complete
--

#9 Re : Général » [inconnu]@[inconnu] LOG: paquet de démarrage incomplet » 15/09/2020 19:13:29

Merci beaucoup Daniel, c'était un peu confus,  ta réponse complétée par ce lien https://unix.stackexchange.com/question … s-to-start
explique bien les choses.

#10 Re : Général » [inconnu]@[inconnu] LOG: paquet de démarrage incomplet » 14/09/2020 23:49:28

Merci dverite pour cette réponse détaillée.
Je suis sous Debian , je trouver bien pg_ctlcluster par contre je n'ai pas trouvé où ce script est appelé. En fait je ne comprends pas ce que j'ai trouvé, à savoir que postgresql.service lance /bin/true!
As-tu ou un autre lecteur une explication sur le paramétrage du lancement de postgresql sous debian/ubuntu.

#11 Re : Général » [inconnu]@[inconnu] LOG: paquet de démarrage incomplet » 14/09/2020 11:57:00

I s'agit bien du démarrage du seveur et le problème n'est pas résolu même s'il est bénin.

#12 Re : Général » [inconnu]@[inconnu] LOG: paquet de démarrage incomplet » 14/09/2020 11:03:23

J'ai vu cette explication, le message ne se répète pas, ce serait donc bénin et lié à qqc qui ne serait pas encore prêt durant la phase de démarrage.
Ceci dit, le message est ambigu et laisse entendre qu'il y a qqc de plus grave, ce serait bien de trouver un moyen de l'éliminer ou lle faire suivre par un autre validant le démarrage ok  des logs s'il n'y a pas de pb.
En l’occurrence, j'ai changé qq paramètres de conf de mes logs et cela n'a pas, initialement, fonctionné comme je le voulais, j'ai imaginé que cela pouvait venir de là, mais en fait c'était simplement un mauvais paramétrage.

#13 Général » [inconnu]@[inconnu] LOG: paquet de démarrage incomplet » 14/09/2020 09:29:24

PmGs7
Réponses : 9

Bonjour à tous,
Le message "[inconnu]@[inconnu] LOG:  paquet de démarrage incomplet" apparaît en tant que dernière ligne de log suite à un démarrage du service.
Un lecteur peut-il expliquer son origine et conséquence?
Merci d'avance.

#14 Re : Général » Récupéartion d'un cluster détruit? » 09/10/2018 00:30:17

Et oui ... :-(
Cependant ma vm est 'au frigo', les données sont forcément là dans le lvm, je vais tout de même à temps perdu voir si je ne peux pas récupérer qqc.
Ceci dit ma priorité est de repartir, c'est presque fait, dans une autre vm sur un autre lvm avec ma dernière sauvegarde opérationnelle. Je n'ai perdu que qq 'logs' les données critiques étaient dans deux bases redondantes.

#15 Re : Général » Récupéartion d'un cluster détruit? » 08/10/2018 22:54:49

Merci Julien, mais je me suis mal exprimé initialement. J'ai eu un problème majeur, toujours inexpliqué à cette heure, dans ma vm. Cela a conduit à des pertes de données (disparition des certaines répertoires, ...) et m'a obligé à réinstaller une partie du système, dont postgresql. Ce dernier est reparti avec un nouveau cluster /var/lib/postgresql/9.6/main et à cette heure je n'ai toujours pas retrouver les anciennes données.

#16 Général » Récupéartion d'un cluster détruit? » 08/10/2018 21:03:39

PmGs7
Réponses : 4

Bonjour,
J'ai un serveur postgresql qui fonctionne dans un container lxc sous debian 9. J'ai du réinstallé openssl et au passage postgresql 9.6. Mon ancien cluster a donc été détruit et recréé.
Je découvre, après coup!,  que le fichier de la dernière sauvegarde d'une de mes bases est illisible (pb de disque). Avant d'aller rechercher la précédente sauvegarde qui date de plusieurs mois et de maj le nouveau cluster un lecteur a-t-il une astuce pour retrouver les/des données de l'ancien cluster.
Merci d'avance.

#17 Re : Optimisation » Sanity Check (SchemaSpy) » 07/09/2018 00:29:04

rjuju a écrit :

Vous pouvez regarder du côté de https://github.com/okbob/plpgsql_check.

Super, c'est exactement ce que je cherchais.

MERCI

#18 Re : Optimisation » Sanity Check (SchemaSpy) » 03/09/2018 23:37:08

Hello les admin,
Je tavaille avec PostgreSQL depuis 1999, sans parler de mes contacts avec Ingres dans les annés 80, jamais je n'ai parlé de bug PostgreSQL, relisez bien mon post.
Vous répondez à mes questions à partir de "A ma connaissance ..." , merci pour cela et voici mes commentaires.
- cela générera des faux posififs : Oui* (sauf à intrduiduire des règles de codage) ce qui n'est pas un problème car mon soucis est la robustesse (absence de bug).
*idem principe de la page Anomalies de SchemaSpy
- je vais regarder plpgsql_check avant d'écrire mon scirpt, il est peut-être oppurtun de proposer une fonctionnalité complémentaire à ce projet

#19 Re : Optimisation » Sanity Check (SchemaSpy) » 03/09/2018 16:59:57

Bien sûr que les triggers associés à une table sont liés à cette table et donc détruits si l'on détruit la table.

Ceci dit, et c'était le bug, il peut y avoir un trigger sur une autre table qui intéragit avec une table tiers. C'est du code sans aucun lien et donc la destrcution de la table tiers est possible simplement, l'erreur ne se produira qu'à l'éxécution.

Je n'ai pas trouvé d'outil qui vérifie ou aide à l'analyse de ce cas de figure et je ne ferme donc pas le sujet, un lecteur futur aura peut-être une piste.

En ce qui me concerne je vais 'simplement' écrire un petit script qui vérifiera que les tables utilisées dans mes fonctions exsitent toujours.

#20 Demandes » Disponibilités » 01/09/2018 08:25:05

PmGs7
Réponses : 0

Bonjour,

J'utilse PostgreSQL sous Linux depuis 1999 et suis disponible en temps partiel dans l'Est (54, 47 et Luxembourg) et ponctuellement sur Paris.

Philippe
pmg.sr.d@gmail.com

#21 Optimisation » Sanity Check (SchemaSpy) » 01/09/2018 07:09:39

PmGs7
Réponses : 6

Bonjour à tous,

J'ai résolu il y a qq jours un bug lié à l'existence d'un trigger sur une table détruite.

Question 1) Je poste ce sujet rapidement sans avoir encore bien analyé l'origine du problème cedi dit, tel que décrit ci-dessus, cela m'a étonné et je cherche un outil qui pourrait prévenir l'existence d'un tel bug ou autre?

Question 2) Je viens de tester SchemaSpy qui possède une "section Anomalies" mais sauf erreur de ma part les triggers et fonctions ne sont pas (encore) traitées pour PostgreSQL. Avez-vous une autre info?

Merci d'avance.

#22 Re : Général » Conversion requête en json » 06/07/2016 08:40:15

Il ne semble pas y avoir d'erreur dans la requête mais le résultat dépend aussi de la structure et du contenu des tables ...

#23 Re : Réplication » Réplication ou Synchronisation. » 01/03/2016 13:39:00

1) Il faut bien démarrer, si je m'étais fier à des on-dits je n'aurai pas écrit ce post.
2) et donc ? cela semble toujours rester une question sans réponse ... autre que pg_comparator ? qui fonctionne sans ce poser cette question !
3) une solution est toujours relative à un problème, je n'ai pas exprimé de contrainte de temps dans mon besoin !
Merci pour le retour sur Bucardo qui corrobore le mien.
A noter que j'ai également tester la réplication interne de Postgresql qui fonctionne bien mais nécessite des versions identiques et une 'bonne valeur' au point précédent smile


A l'occasion j'essairai Slony pour comprendre 2) et comparer sa rapidité avec pg_comparator qui reste donc aujourd'hui la solution à mon besoin.

#24 Re : Réplication » Réplication ou Synchronisation. » 01/03/2016 11:40:53

Bonjour gleu et rjuju,


merci pour votre réactivité


1) Slony :
Je n'ai pas pris le temps de le tester car j'ai lu, probablement trop rapidement, qu'il n'était plus en 'vogue'.
Bucardo est également capable de fonctionner avec des versions différentes, je l'ai testé, cela fonctionne bien lorsque les serveurs sont toujours actifs, je n'ai rien compris pour l'organisation simple d'une reprise suite à l'arrêt du maître ...


2)

rjuju a écrit :

Je dirais qu'il parlait de positionner le wal_keep_segments à une valeur suffisamment haute..

C'est effectivement ce que j'ai écris, désolé si j'ai utilisé un terme non technique que je souhaitais plus accessible à tous. Comment définir cette valeur suffisamment haute sans spécifier une limite de modifs dans le maître ? et corollairement comment suivre et ne pas dépasser cette limite dans le maître ?
Je suppose que Slony passe par une telle config ?


3) Aucun de vous deux ne s'exprime sur pg_comparator ?


Au plaisir de vous lire et

si un autre lecteur a un retour d'expérience entre cette solution et Slony ou Bucardo ce serait bien de la partager.

#25 Réplication » Réplication ou Synchronisation. » 29/02/2016 16:07:21

PmGs7
Réponses : 6

Bonjour à tous.


J'ai eu récemment besoin de répliquer/synchroniser des données contenues dans une base maître d'un PC portable vers une base esclave sur un serveur. Bien sûr le PC portable n'est pas toujours connecté, le serveur doit toujours mettre à disposition les dernières données en sa possession et les deux n'ont pas de raison d'utiliser une même version de postgreql.


Il y de nombreux articles sur le net qui présentent les solutions de réplication :
http://www.postgresql.org/docs/current/ … tions.html
http://www.dalibo.org/hs44_une_synthese … s_le_futur


Mais, sauf erreur de ma part, aucune de ces solutions ne répond au besoin simplement. Ce serait faisable par un 'bon dimensionnement' du cache, cad des fichiers nécessaires à la réplication, et supposerait donc une gestion d'une limite des modifications possibles sur le portable avant un nécessaire transfert sur le serveur. Ai-je bien compris ? Y a-t-il une solution simple ?


Je me suis donc tourné vers des solutions de synchronisation et j'ai trouvé :
- pgdiff et apgdiff que j'ai rapidement éliminées car j'ai compris qu'elles reposent sur un dump complet de la base et je ne peux pas les considérer comme performante en terme de charge réseau
- dblink qui nécessite une programmation complète de ce que l'on souhaite
- easter-eggs.com/Systeme-de-synchronisation, qui semble être une bonne solution intermédiare tout en nécessitant que les tables à répliquer diposent d'un index entier
- pg_comparator qui fonctionne bien et répond parfaitement au besoin énnoncé au début de ce post
A noter que ces 3 solutions peuvent fonctionner avec des versions de postgresql différentes.

Pied de page des forums

Propulsé par FluxBB