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).

#26 Re : pgAdmin4 » Invalid byte sequence for encoding "UTF8" » 06/12/2017 08:10:35

Bonjour Guillaume,

Même problème sous PSQL, sur différents serveurs.

[postgres@dev-indusbdd-01 pg_log]$ psql geo
psql (10.1)
Type "help" for help.

geo=# SELECT t.oid,t.tgname AS name, t.xmin, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable,nspname, des.description, l.lanname, p.prosrc, p.proname AS tfunction,COALESCE(substring(pg_get_triggerdef(t.oid), 'WHEN (.*) EXECUTE PROCEDURE'),substring(pg_get_triggerdef(t.oid), 'WHEN (.*)  \\$trigger')) AS whenclause,(string_to_array(encode(tgargs, 'escape'), '\000')::text[])[1:tgnargs] AS custom_tgargs,(CASE WHEN t.oid <= 13157::oid THEN true ElSE false END) AS is_sys_trigger,(CASE WHEN tgconstraint != 0::OID THEN true ElSE false END) AS is_constarint,(CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger
geo-# FROM pg_trigger t JOIN pg_class cl ON cl.oid=tgrelid JOIN pg_namespace na ON na.oid=relnamespace LEFT OUTER JOIN pg_description des ON (des.objoid=t.oid AND des.classoid='pg_trigger'::regclass) LEFT OUTER JOIN pg_proc p ON p.oid=t.tgfoid LEFT OUTER JOIN pg_language l ON l.oid=p.prolang
geo-# WHERE NOT tgisinternal AND tgrelid = 16753::OID AND t.oid = 18113::OID
geo-# ORDER BY tgname;
ERROR:  invalid byte sequence for encoding "UTF8": 0x00
geo=# \q

Je suis tombé sur un post qui parle du même sujet mais je ne vois pas de solution : https://www.postgresql.org/message-id/A … ebates.com

Ci-dessous la description d'une table sur laquelle le problème se pose :

CREATE TABLE activite
(
  id_cgu character varying(20) NOT NULL,
  id_site character varying(20) NOT NULL,
  id_ligne character varying(4) NOT NULL,
  id_plan character varying(4) NOT NULL,
  id_fonction character varying(4) NOT NULL,
  id_operation character varying(5) NOT NULL,
  id_type_ptg numeric NOT NULL,
  id_type_act character varying(3) NOT NULL,
  tps_gam numeric(7,4) DEFAULT 0,
  tps_gam_test numeric(7,4) DEFAULT 0,
  id_type_coq character varying(3) NOT NULL,
  id_type_qte_act numeric NOT NULL DEFAULT 0,
  qte_igeo boolean NOT NULL DEFAULT false,
  id_alim_document numeric NOT NULL DEFAULT 0,
  id_type_cum_doc numeric NOT NULL DEFAULT 1,
  sum_quantite boolean NOT NULL DEFAULT true,
  id_methode_qt numeric NOT NULL DEFAULT 0,
  lfo_cgu character(12),
  date_fin date NOT NULL DEFAULT to_date('30000101'::text, 'YYYYMMDD'::text),
  CONSTRAINT pk_activite PRIMARY KEY (id_cgu, id_site, id_ligne, id_plan, id_fonction, id_operation, date_fin),
  CONSTRAINT fk_activite_alim_document FOREIGN KEY (id_alim_document)
      REFERENCES alim_document (id_alim_document) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_cgu FOREIGN KEY (id_cgu)
      REFERENCES cgu (id_cgu) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_fonction FOREIGN KEY (id_cgu, id_fonction)
      REFERENCES fonction (id_cgu, id_fonction) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_ligne FOREIGN KEY (id_cgu, id_ligne)
      REFERENCES ligne (id_cgu, id_ligne) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_methode_qt FOREIGN KEY (id_methode_qt)
      REFERENCES methode_qt (id_methode_qt) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_operation FOREIGN KEY (id_cgu, id_operation)
      REFERENCES operation (id_cgu, id_operation) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_plan FOREIGN KEY (id_cgu, id_plan)
      REFERENCES plan (id_cgu, id_plan) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_site FOREIGN KEY (id_cgu, id_site)
      REFERENCES site (id_cgu, id_site) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_type_act FOREIGN KEY (id_type_act)
      REFERENCES type_act (id_type_act) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_type_coq FOREIGN KEY (id_type_coq)
      REFERENCES type_coq (id_type_coq) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_type_cum_doc FOREIGN KEY (id_type_cum_doc)
      REFERENCES type_cum_doc (id_type_cum_doc) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_type_ptg FOREIGN KEY (id_type_ptg)
      REFERENCES type_ptg (id_type_ptg) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_activite_type_qte_act FOREIGN KEY (id_cgu, id_type_qte_act)
      REFERENCES type_qte_act (id_cgu, id_type_qte_act) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
ALTER TABLE activite
  OWNER TO postgres;
GRANT ALL ON TABLE activite TO postgres;
GRANT SELECT ON TABLE activite TO basic_geo;
GRANT UPDATE, INSERT ON TABLE activite TO maj_geo;
GRANT DELETE ON TABLE activite TO adm_geo;
GRANT UPDATE, INSERT, DELETE ON TABLE activite TO maj_console;

CREATE INDEX activite_lpfo
  ON activite
  USING btree
  (id_ligne COLLATE pg_catalog."default", id_plan COLLATE pg_catalog."default", id_fonction COLLATE pg_catalog."default", id_operation COLLATE pg_catalog."default");

CREATE INDEX activite_sc
  ON activite
  USING btree
  (id_site COLLATE pg_catalog."default", id_cgu COLLATE pg_catalog."default");

CREATE TRIGGER jt_activite
  AFTER INSERT OR UPDATE OR DELETE
  ON activite
  FOR EACH ROW
  EXECUTE PROCEDURE j_geo.jf_recharge_activite();

CREATE OR REPLACE FUNCTION j_geo.jf_recharge_activite()
  RETURNS trigger AS
$BODY$
DECLARE
BEGIN
    IF tg_op = 'DELETE' THEN
        INSERT INTO j_geo.j_recharge_activite(id_abonne,j_consumed,j_flag,j_date,id_cgu,id_site)
        SELECT id_abonne,'0','D',NOW(),OLD.id_cgu,OLD.id_site FROM jrn_center.jrn_abonnes WHERE j_tname='geo.activite' AND j_start=TRUE and (filter_1=OLD.id_cgu or filter_1='*') and (filter_2=OLD.id_site or filter_2='*');       
    ELSE
        INSERT INTO j_geo.j_recharge_activite(id_abonne,j_consumed,j_flag,j_date,id_cgu,id_site)
        SELECT id_abonne,'0','I',NOW(),NEW.id_cgu,NEW.id_site FROM jrn_center.jrn_abonnes WHERE j_tname='geo.activite' AND j_start=TRUE and (filter_1=NEW.id_cgu or filter_1='*') and (filter_2=NEW.id_site or filter_2='*');   
    END IF;
    RETURN NULL;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION j_geo.jf_recharge_activite()
  OWNER TO postgres;
GRANT EXECUTE ON FUNCTION j_geo.jf_recharge_activite() TO postgres;
GRANT EXECUTE ON FUNCTION j_geo.jf_recharge_activite() TO basic_jgeo;
REVOKE ALL ON FUNCTION j_geo.jf_recharge_activite() FROM public;

#27 Re : pgAdmin4 » Invalid byte sequence for encoding "UTF8" » 30/11/2017 08:27:42

Bonjour Guillaume,
Pour valider que ce n'est pas lié à mon instance 10.1 toute fraîche, j'ai le même problème sur d'autres bases sur d'autres serveurs.

#28 pgAdmin4 » Invalid byte sequence for encoding "UTF8" » 29/11/2017 12:33:30

mortimer.pw
Réponses : 15

Bonjour,
Je découvre PgAdmin 4. Version2.0. Python Version2.7.13. Flask Version0.12.2. Application ModeDesktop, sous Windows 7 Pro.
J'accède à une base 10.1 sous Linux.
J'ai le message d'erreur donné en titre lorsque je veux visualiser la description de certaines tables (clic sur la table, Onglet SQL).
J'ai cherché un peu sur la toile, sans succès.
Mon Serveur Encoding est UTF8
Mon Client Encoding est UNICODE
Ma base est en UTF8
Dans mon postgresql.conf, j'ai escape_string_warning = off et standard_conforming_strings = off
Si quelqu'un peut m'aider.
J'ai également cette erreur dans les logs : 2017-11-29 11:25:27 CET [22730]
: [2301-1] user=postgres 192.168.71.18 2017-11-29 10:08:41 CET ERROR: invalid byte sequence for encoding "UTF8": 0x00 : [2302-1] user=postgres 192.168.71.18 2017-11-29 10:08:41 CET
STATEMENT: SELECT t.oid,t.tgname AS name, t.xmin, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, nspname, des.description, l.lanname, p.prosrc, p.proname AS tfunction, COALESCE(substring(pg_get_triggerdef(t.oid), 'WHEN (.*) EXECUTE PROCEDURE'), substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \\$trigger')) AS whenclause, -- We need to convert tgargs column bytea datatype to array datatype (string_to_array(encode(tgargs, 'escape'), '\000')::text[])[1:tgnargs] AS custom_tgargs, (CASE WHEN t.oid <= 13157::oid THEN true ElSE false END) AS is_sys_trigger, (CASE WHEN tgconstraint != 0::OID THEN true ElSE false END) AS is_constarint, (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger FROM pg_trigger t JOIN pg_class cl ON cl.oid=tgrelid JOIN pg_namespace na ON n [LINE TRUNCATED, original was 1,296 characters long]

#29 Re : Général » Compter les connexions » 30/10/2017 15:17:37

Bonjour Daniel,
Effectivement c'est bien ça.
Dommage !
Merci.

#30 Général » Compter les connexions » 30/10/2017 13:14:00

mortimer.pw
Réponses : 2

Bonjour,
Je travaille avec une base 9.6.5 sous CentOS 7.
J'ai fait une petite fonction, qui prend en paramètre le nom d'une base de données, fait un SELECT sur PG_STAT_ACTIVITY pour voir les connexions et leur état, puis alimente une table avec les infos collectées.

Description de la Fonction :
CREATE OR REPLACE FUNCTION dba.inf_conn(cdb character varying)
  RETURNS void AS
$BODY$
DECLARE
    RConn RECORD;
BEGIN
    DELETE FROM DBA.conn_snap WHERE EXTRACT(DAYS FROM CURRENT_TIMESTAMP-now)::INTEGER>2;
    FOR RConn IN    SELECT CURRENT_TIMESTAMP AS now,conn.usename,conn.state,conn.nb_conn
            FROM (SELECT usename,state,COUNT(*) AS nb_conn FROM pg_stat_activity WHERE pid <> PG_BACKEND_PID() AND datname=cdb GROUP BY usename,state) conn LOOP
        INSERT INTO DBA.conn_snap(now,utilisateur,etat_conn,nb_conn) VALUES(RConn.now,RConn.usename,RConn.state,RConn.nb_conn);
    END LOOP;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

Description de la Table :
CREATE TABLE dba.conn_snap
(
  id serial NOT NULL,
  now timestamp with time zone NOT NULL,
  utilisateur character varying(30) NOT NULL,
  etat_conn text,
  nb_conn integer NOT NULL DEFAULT 0,
  CONSTRAINT pk_conn_snap PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);

Le problème est que le champ STATE de la requête sur PG_STAT_ACTIVITY semble ne rien renvoyer comme valeur.
Alors que si j'exécute la requête manuellement, j'ai bien souvent 'idle'.

Pouvez-vous m'aider ?

#31 Général » Compter les connexions » 30/10/2017 13:13:56

mortimer.pw
Réponses : 0

Bonjour,
Je travaille avec une base 9.6.5 sous CentOS 7.
J'ai fait une petite fonction, qui prend en paramètre le nom d'une base de données, fait un SELECT sur PG_STAT_ACTIVITY pour voir les connexions et leur état, puis alimente une table avec les infos collectées.

Description de la Fonction :
CREATE OR REPLACE FUNCTION dba.inf_conn(cdb character varying)
  RETURNS void AS
$BODY$
DECLARE
    RConn RECORD;
BEGIN
    DELETE FROM DBA.conn_snap WHERE EXTRACT(DAYS FROM CURRENT_TIMESTAMP-now)::INTEGER>2;
    FOR RConn IN    SELECT CURRENT_TIMESTAMP AS now,conn.usename,conn.state,conn.nb_conn
            FROM (SELECT usename,state,COUNT(*) AS nb_conn FROM pg_stat_activity WHERE pid <> PG_BACKEND_PID() AND datname=cdb GROUP BY usename,state) conn LOOP
        INSERT INTO DBA.conn_snap(now,utilisateur,etat_conn,nb_conn) VALUES(RConn.now,RConn.usename,RConn.state,RConn.nb_conn);
    END LOOP;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

Description de la Table :
CREATE TABLE dba.conn_snap
(
  id serial NOT NULL,
  now timestamp with time zone NOT NULL,
  utilisateur character varying(30) NOT NULL,
  etat_conn text,
  nb_conn integer NOT NULL DEFAULT 0,
  CONSTRAINT pk_conn_snap PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);

Le problème est que le champ STATE de la requête sur PG_STAT_ACTIVITY semble ne rien renvoyer comme valeur.
Alors que si j'exécute la requête manuellement, j'ai bien souvent 'idle'.

Pouvez-vous m'aider ?

#33 Re : Réplication » PG_STAT_REPLICATION et PG_STAT_WAL_SENDER » 23/10/2017 07:48:15

Bonjour,

Concernant PG_STAT_WAL_RECEIVER :

        received_lsn : Dernière position des journaux de transactions, déjà reçue et écrite sur disque
                    Est-ce la correspondance avec flush_location de PG_STAT_REPLICATION ?

        last_msg_send_time : Horodatage d'envoi du dernier message reçu à partir du walsender
                    C'est l'heure d'envoi du Maître ?

        last_msg_receipt_time : Horodatage de la réception du dernier message à partir du walsender
                    C'est l'heure de réception de l'Esclave ?

        latest_end_lsn : Dernière position de transaction reportée par le walsender associé
                    En lien avec la colonne sent_location de PG_STAT_REPLICATION ?
                    Ou avec pg_current_xlog_location() sur le Maître ?

Merci.

#34 Re : Réplication » PG_STAT_REPLICATION et PG_STAT_WAL_SENDER » 17/10/2017 16:08:15

Guillaume,
Merci mais c'est justement après avoir lu la doc (9.6) que j'ai des questions.

#35 Re : Réplication » PG_STAT_REPLICATION et PG_STAT_WAL_SENDER » 17/10/2017 14:57:15

Bonjour Guillaume.

Effectivement :-), le voulais dire PG_STAT_WAL_RECEIVER.

#36 Réplication » PG_STAT_REPLICATION et PG_STAT_WAL_SENDER » 17/10/2017 14:22:28

mortimer.pw
Réponses : 7

Bonjour,

Je travaille avec une base 9.6.5 sous CentOS 7.

J'ai un peu de mal à comprendre les différentes colonnes des deux vues citées dans le titre et leur relation.

PG_STAT_REPLICATION

        write_location : La position de la dernière transaction écrite sur disque par ce serveur standby
        flush_location : La position de la dernière transaction vidée sur disque par ce serveur standby

                    Quelle est la différence ?

PG_STAT_WAL_SENDER

        received_lsn : Dernière position des journaux de transactions, déjà reçue et écrite sur disque

                    Est-ce en relation avec les deux colonnes write_location et flush_location de PG_STAT_REPLICATION ?

        last_msg_send_time : Horodatage d'envoi du dernier message reçu à partir du walsender

                    C'est l'heure d'envoi du Maître ?

        last_msg_receipt_time : Horodatage de la réception du dernier message à partir du walsender

                    C'est l'heure de réception de l'Esclave ?

        latest_end_lsn : Dernière position de transaction reportée par le walsender associé

                    En lien avec la colonne sent_location de PG_STAT_REPLICATION ?
                    Ou avec pg_current_xlog_location() sur le Maître ?

Quelqu'un peut-il m'éclairer ?
D'avance merci.

#37 Re : PL/pgSQL » Exploiter RECORD pg_control_checkpoint() » 16/10/2017 08:00:45

Bonjour Marc,

Merci pour la soluce, ça me convient.

Bonne journée.

#38 PL/pgSQL » Exploiter RECORD pg_control_checkpoint() » 13/10/2017 09:45:51

mortimer.pw
Réponses : 2

Bonjour,

Je travaille avec un moteur 9.6.5 sous Cent-OS 7.

La Fonction pg_control_checkpoint() retourne un RECORD avec différentes informations (colonnes).

Comment les exploiter ?

CREATE OR REPLACE FUNCTION dba.checkpoint()
  RETURNS void AS
$BODY$
DECLARE
    rCheck RECORD;
BEGIN
    SELECT pg_control_checkpoint() INTO rCheck;
    RAISE NOTICE 'Checkpoint location : %', rCheck.checkpoint_location;
END;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;

D'avance merci pour votre aide.

#40 Re : Sécurité » Tail & Mail problème LOG_LINE_PREFIX » 01/02/2017 08:25:07

Bonjour Arthurr,
Ci-dessous le résultat de la commande :
[postgres@dev-indusbdd-01 ~]$ perl /home/postgres/scripts/tail_n_mail --dryrun --debug /home/postgres/scripts/tnm.config.txt
Opened config file "/home/postgres/scripts/tnm.config.txt"
$opt1 = {
          'email' => [
.....
.....
$arg1 = {
          'verbose' => 1,
          'log_line_prefix' => '\'%t [%p]: [%l-1] user=%u %h %s\'',
          'mailserver' => 'example.com',
.....
.....
        };
  Log line prefix regex: (?-xism:^((\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d \w\w\w\w?) \[(\d+)\]: \[\d+\-1\] user=[\[\w\-\.\]]* \S* %s)(.*))
  Log line prefix regex2: (?-xism:^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d \w\w\w\w? \[\d+\]: \[\-1\] user=  )
  Log line prefix regex3: (?-xism:^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d \w\w\w\w?)
Parsing file: /home/postgres/pg_log/3-07.log
.....

Visiblement, oui il est récupéré.

Merci pour ton aide.

#41 Re : Sécurité » Tail & Mail problème LOG_LINE_PREFIX » 31/01/2017 14:13:10

Bonjour Arthurr,
Merci pour la participation, mais cela ne change rien :-(.

#42 Re : Sécurité » Tail & Mail problème LOG_LINE_PREFIX » 31/01/2017 09:09:11

Bonjour Guillaume,

Tout d'abord, j'ai dit une bêtise, j'ai indiqué mon log_line_prefix, non pas dans mon /home/postgres/scripts/tnm.config.txt, mais dans le /home/postgres/.tailnmailrc (à la racine de mon user).

Sans ce fichier /home/postgres/.tailnmailrc, j'exécute les commandes ci-dessous, je reçois un  mail.

[postgres@dev-bdd-01 ~]$ psql geo
psql.bin (9.5.1)
Type "help" for help.

geo=# select * from titi;
ERROR:  relation "titi" does not exist
LINE 1: select * from titi;
                      ^
geo=# \q
[postgres@dev-bdd-01 ~]$ perl /home/postgres/scripts/tail_n_mail /home/postgres/scripts/tnm.config.txt

Avec ce fichier, je ne reçois plus de mail.

#43 Re : Sécurité » Tail & Mail problème LOG_LINE_PREFIX » 30/01/2017 11:39:13

Bonjour Guillaume,

J'ai téléchargé les deux fichiers, tail_n_mail et tail_n_mail.asc, à l'URL : https://bucardo.org/wiki/Tail_n_mail
Puis copié les copier dans /home/postgres/scripts et les aient rendu exécutable.

J'ai exécuté la commande suivante pour créer le fichier de configuration :
    tail tail_n_mail > tnm.config.txt

J'ai modifié le fichier de configuration pour indiquer :
    EMAIL:
    MAILSUBJECT:
    FILE:
    INCLUDE: WARNING: pour avoir les anomalies d'écriture des WAL archivés par Pitrery (ARCHIVE_OVERWRITE="no")
        LOG_LINE_PREFIX: '%t [%p]: [%l-1] user=%u %h %s '

J'ai mis en Crontab
    # TnM PostgreSQL ALERTE
    */2 * * * * perl /home/postgres/scripts/tail_n_mail /home/postgres/scripts/tnm.config.txt

Voilà toutes les infos, merci pour votre aide.

#44 Sécurité » Tail & Mail problème LOG_LINE_PREFIX » 27/01/2017 11:07:49

mortimer.pw
Réponses : 9

Bonjour,

Je travaille avec un moteur 9.2.3 sous Cent-OS 6.

J'essaye de mettre en place Tail & Mail pour remonter des alertes.

Cela fonctionne, sauf quand je veux indiquer dans le tnm.config.txt, la valeur  LOG_LINE_PREFIX: '%t [%p]: [%l-1] user=%u %h %s '

Si cela peut aider, exemple de ligne de mon fichier de trace :
2017-01-27 10:51:00 CET [26578]: [4-1] user=postgres [local] 2017-01-27 10:51:00 CET LOG:  disconnection: session time: 0:00:00.014 user=postgres database=postgres host=[local]

Avez-vous une idée ?

D'avance merci.

#45 Re : PL/pgSQL » Première occurrence de couple » 18/01/2017 12:40:21

Bonjour Marc,

Fantastique !
Une fois écrite, elle paraît évidente :-)

Je n'ai pas le reflexe de penser à row_number().

Merci beaucoup.

#46 Re : PL/pgSQL » Première occurrence de couple » 18/01/2017 08:23:15

Bonjour Julien,
Ah mince ! :-(
Les enregistrements doivent être triés par Id_document, Jour, Début, Fin.
Je parcours et je tombe sur le 1er couple Id_document+Id_operation.
Si j'ai une autre occurrence de ce couple, ce couple m'intéresse.
Mais en plus il faut qu'un autre couple s'intercale (deux couples identiques qui se suivent ne m'intéresse pas).
J'espère que c'est mieux.
Merci de prendre le temps de m'aider.

#47 Re : PL/pgSQL » Première occurrence de couple » 17/01/2017 14:19:03

Bonjour Julien,

Par exemple, celui-ci : le couple 72308647+0003, s'intercale entre deux occurrences du couple 72308647+0001.
00212        0001            72308647        2016-12-19        091418        091727        0.052500        27
00217        0003            72308647        2016-12-19        105714        105758        0.012222        27
00212        0001            72308647        2016-12-19        110935        110948        0.003611        0

Ou encore, celui-là : le couple 04648240+0011, s'intercale deux fois, entre deux occurrences du couple 04648240+0010.
00206        0010            04648240        2017-01-10        152749        153236        0.079722        32
00206        0011            04648240        2017-01-10        153236        153421        0.029167        32
00206        0011            04648240        2017-01-10        153755        154248        0.081389        0
00211        0010            04648240        2017-01-11        073208        073302        0.015000        32

J'espère que c'est plus clair. Pas toujours facile d'énoncer un problème, désolé.

#48 PL/pgSQL » Première occurrence de couple » 17/01/2017 11:28:15

mortimer.pw
Réponses : 6

Bonjour,

Je travaille sur un moteur 9.3 sous Cent-OS.

J'ai la table suivante :

id_perso        id_operation    id_document    jour                debut        fin            temps        quantite
00201        0001            72456649        2016-12-19        080000        081500        0.250000        27
00201        0001            72456649        2016-12-19        081500        083000        0.250000        0
00201        0001            72456649        2016-12-19        083000        084500        0.250000        0
00212        0001            72308647        2016-12-19        091418        091727        0.052500        27
00217        0003            72308647        2016-12-19        105714        105758        0.012222        27
00212        0001            72308647        2016-12-19        110935        110948        0.003611        0
00209        0050            72308647        2016-12-22        145144        145515        0.058611        27
00217        0051            72308647        2016-12-22        170642        170720        0.010556        27
00217        0002            04648240        2017-01-10        094342        094602        0.038889        32
00206        0010            04648240        2017-01-10        152749        153236        0.079722        32
00206        0011            04648240        2017-01-10        153236        153421        0.029167        32
00206        0011            04648240        2017-01-10        153755        154248        0.081389        0
00211        0010            04648240        2017-01-11        073208        073302        0.015000        32
00210        0036            04648240        2017-01-11        115652        120935        0.211944        154

Je voudrais trouver, pour chaque couple id_document+id_operation, la première occurrence, seulement s'il y a plusieurs occurrences et qu'un autre couple vient s'intercaler entre elles.

En résultat, je devrais avoir :

id_perso        id_operation    id_document    jour                debut        fin            temps        quantite
00212        0001            72308647        2016-12-19        091418        091727        0.052500        27
00206        0010            04648240        2017-01-10        152749        153236        0.079722        32

Est-ce possible SANS passer par PL/pgSQL ? peut-être avec une fonction de fenêtrage (que j'ai du mal à maîtriser).

Pouvez-vous m'aiguiller, svp ?

D'avance merci pour votre aide.

#49 Re : Général » Orphan temp table » 24/10/2016 09:19:46

Ne rien faire, ça me va :-), merci Julien.

#50 Re : Général » Sauvegardes autonomes à chaud » 24/10/2016 08:13:05

Bonjour Julien,
D'accord, je comprends mieux. Sans archiver les WAL suivant la sauvegarde, je ne pourrai pas faire une restauration PITR.
Merci.

Pied de page des forums

Propulsé par FluxBB