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

#1 Re : Général » Requeste à optimiser » 23/03/2018 17:23:38

Si il y a un volontaire  prêt pour la réécriture de la requête (comme cité plus haut par gleu), je suis preneur.


Merci d'avance

#2 Re : Général » Requeste à optimiser » 22/03/2018 11:29:30

Merci gleu,

il n y a pas d'index intéressant à rajouter, les filtres ne sont pas du tout discriminent.
Par contre, je ne vois pas comment on peut réécrire la requête sans passer par la sous requête.


Merci d'avance

#3 Général » Requeste à optimiser » 21/03/2018 11:51:02

Postgres.0
Réponses : 4

Bonjour,


depuis quelques jours, je me casse les dents sur cette requête.
Si quelqu'un peut m'aider ou me donner une piste pour l'optimiser, je lui serai reconnaissant.

Merci

SELECT ccc.logger_date,
       ccc.agg,
(SELECT string_agg( bbb.logger_date || ' ' || bbb.indice || ',' || bbb.parameter,';') AS agg_aa
 FROM
(SELECT  distinct ON (first_value( ind_parameter) OVER (partition by ind_parameter ORDER BY  logger_date))
first_value( ind_parameter) OVER (partition by ind_parameter ORDER BY  logger_date) AS indice,
parameter,logger_date
FROM logger
WHERE system_id = '1234-56789'
AND logger_date > ccc.logger_date
AND ind_parameter in ('1','2', '3', '4', '5', '6', '7', '8', '9', '10', '13', '14')
AND parameter IS NOT NULL ) bbb
 )
FROM
(SELECT logger_date, string_agg(ind_parameter || ','|| parameter,';') AS agg, system_id
FROM logger
WHERE system_id = '1234-56789'
AND ind_parameter in ('1','2', '3', '4', '5', '6', '7', '8', '9', '10', '13', '14')
AND parameter IS NOT NULL group by  logger_date, system_id
order by logger_date) ccc;
Subquery Scan on aaa  (cost=0.42..238917116.65 rows=49626 width=104) (actual time=121.370..2504513.471 rows=59651 loops=1)
   ->  GroupAggregate  (cost=0.42..12255.07 rows=49626 width=83) (actual time=0.043..894.271 rows=59651 loops=1)
         Group Key: logger_tmp.logger_date, logger_tmp.system_id
         ->  Index Scan using logger_tmp_logger_date_idx on logger_tmp  (cost=0.42..10298.19 rows=80833 width=26) (actual time=0.019..310.172 rows=87849 loops=1)
               Filter: ((parameter IS NOT NULL) AND ((system_id)::text = '1234-56789'::text) AND ((ind_parameter)::text = ANY ('{1,2,3,4,5,6,7,8,9,10,13,14}'::text[])))
               Rows Removed by Filter: 30334
   SubPlan 1
     ->  Aggregate  (cost=4814.09..4814.10 rows=1 width=32) (actual time=41.953..41.954 rows=1 loops=59651)
           ->  Bitmap Heap Scan on logger_tmp b  (cost=738.49..4350.74 rows=26477 width=15) (actual time=6.629..39.276 rows=1944 loops=59651)
                 Recheck Cond: (logger_date > aaa.logger_date)
                 Filter: (((system_id)::text = '1234-56789'::text) AND ((ind_parameter)::text > ANY ((aaa.arr)::text[])) AND ((ind_parameter)::text = ANY ('{1,2,3,4,5,6,7,8,9,10,13,14}'::text[])))
                 Rows Removed by Filter: 55358
                 Heap Blocks: exact=62729157
                 ->  Bitmap Index Scan on logger_tmp_logger_date_idx  (cost=0.00..731.87 rows=39394 width=0) (actual time=6.396..6.396 rows=57302 loops=59651)
                       Index Cond: (logger_date > aaa.logger_date)
 Planning time: 0.869 ms
 Execution time: 2504554.579 ms
(17 rows)

#4 Re : Général » Conseils pour construire une solution PG » 30/08/2016 10:27:10

Je rebondis sur mon message precedent pour demander si la replication par archivage des wal est deprecated?

#5 Re : Général » Conseils pour construire une solution PG » 26/08/2016 16:55:59

Merci Guillaume,

j'ai fait une streaming réplication + un log shopping (archivage et envoie des wal sur le serveurs slave).
Ensuite j'ai voulu utilisé repmgr, et là je me suis rendu compte que je vais cloner mon master pour l'envoyer vers le slave.
Donc j'ai perdu mon recovery.conf qui permettait au slave d'avaler les wal archivés du master.
le recovery.conf:

standby_mode = 'on'
restore_command =  'gunzip /opt/postgresql/9.5/wal_archive/%f.gz; cp /opt/postgresql/9.5/wal_archive/%f %p;'
archive_cleanup_command = '/usr/lib/postgresql/9.5/bin/pg_archivecleanup -d /opt/postgesql/9.5/wal_archive/ %r'
primary_conninfo        = 'host=DEPRD-INFRA-PG01    port=5432  user=replicator  password=replicator'
trigger_file            = '/opt/postgres/9.5/data/failover'

Ma question est comment utiliser le repmgr tout en gardant l'envoie des fichiers wal du master vers le slave?
et si possible garder le fonctionnement de archive_cleanup_command.

Merci d'avance

#6 Re : Général » Conseils pour construire une solution PG » 24/08/2016 10:34:10

ce que je voulais dire par sauvegarder, c'est d'avoir un deuxième bouncer sur un autre serveur au cas où le premier bouncer tombe.
D'ailleurs, est ce que le serveur sur lequel il y a pgbouncer doit forcement avoir un postgres installé dessus.

#7 Re : Général » Conseils pour construire une solution PG » 23/08/2016 21:24:45

Merci,

est-ce-que je dois backuper cette machine et comment?
Le bouncer, installé sur une machine à part, doit il permettre la connexion sur le master et sur le slave ou bien uniquement sur le master.

#8 Re : Général » Conseils pour construire une solution PG » 23/08/2016 14:50:58

Bonjour,

Je vais donc utiliser pgbouncer devant deux machines (un master et un slave) , comment devrais-je procéder:

1 installer le pgbouncer sur une machine à part

2 installer pgbouncer sur le maitre et sur le slave ( dans ce cas la base du pgbouncer sera répliquée )

#9 Re : Général » Conseils pour construire une solution PG » 17/08/2016 15:24:01

Merci gleu,

pour la réplication j'utilise la SR de postgres et le failover je vais utiliser repmgr ( à moins que je puisse l'utiliser pour faire la réplication)?
Il me reste de savoir comment faire si je veux rajouter une machine à on cluster, comment l'automatiser ( postgres n'a pas de cluster manager)
pgbouncer peu-il être mis devant un master et un slave ou il est juste un polar de connexions?

#10 Re : Général » Conseils pour construire une solution PG » 17/08/2016 15:02:46

Merci rjuju,

en réalité je cherche à pouvoir satisfaire en lecture et en écriture plus de 1000 utilisateurs en même temps.
L'application doit être disponible à n'importe quelle moment.
Je cherche également une solution qui va me permettre de rajouter des serveurs quand j'atteins le pic pour ce site ( 90000 users connectés par donner leur avis sur un sujet d'actualité)

J'ai pensé à pgpool2, mais je ne sais pas si je dois le mettre sur chaque serveur postgres ou le mettre sur des serveurs à part.
Est-ce-que je dois utiliser une virtual ip pour les machines pgpool.
Est-ce-que pgpool gère bien la réplication?

#11 Général » Conseils pour construire une solution PG » 17/08/2016 14:48:12

Postgres.0
Réponses : 14

Bonjour,

je dois construire une base de donnée postgresql version 9.5 pour une site de presse en ligne qui est censé recevoir en moyenne 15000 visiteurs par heure.
Nous pensons qu'il peut y avoir 1000 utilisateurs connectés en même temps sue le site et donc entrain d'utiliser la base de donnée.
Je cherche à faire une solution genre cluster postgres (tout ça pour ne pas aller vers du nosql, elasticsearch ou cassandra), je ne dispose pas de beaucoup de temps pour faire des poc.
Je vais donc essayer pgpool2, mais en cherchant je me suis rendu compte qu'il n'est pas conseillé.
Je fais donc appelle à vous pour me donner des indications sur la meilleure solution pour ce genre de problèmatiques.


Merci d'avance

#12 Re : Général » Auto completion » 25/07/2016 16:12:05

d'après ce que semble dire rjuju cela ne marche que si c'est une petite table.
Si quelqu'un a une piste pour une grosse table avec une colonne qui contient des millions de messages twitter, ça serait top

#13 Re : Général » Auto completion » 25/07/2016 15:59:54

L'index avec pg_trgm il est de type B-Tree?

#14 Re : Général » Auto completion » 25/07/2016 15:58:45

Oui mon besoin pour le moment est de faire l'autocomplétion sur les communes de France, de mémoire 36000.
Mais j'aurai de l'autocomplétion à faire sur des tables de quelques millions de lignes qui contiennent des tweats

#16 Re : Général » Auto completion » 25/07/2016 15:48:42

je suis parti sur l'idée de créer une autre table qui contient regexp_split_to_table(simplify(commune), E'\\s+')  avec une clef étrangère vers la table maire.

CREATE TABLE particule (
    id                     integer,
    atome              character varying,
    CONSTRAINT particule_id FOREIGN KEY (id)
      REFERENCES maire(id) ;
);

sauf que je serai obligé d'utiliser LIKE pour la completion de la  deuxième partie du nom de la commune, exemple:  "Chézery-Forens" c'est à dire Forens.
Et je n'ai aucun moyen de gérer la complétion de la première partie du nom de la commune c'est à dire  "Chézery"

#17 Re : Général » Auto completion » 25/07/2016 15:36:13

Après avoir installer l'extension "unaccent", j'ai écrit une fonction qui enlève les accents et mets le mot en minuscule:

CREATE OR REPLACE FUNCTION simplify(text)
  RETURNS text AS
$BODY$
select lower(unaccent($1));
$BODY$
  LANGUAGE sql IMMUTABLE
  COST 100;

Ensuite j'ai rajouté une colonne tsvector que j'ai renseigné avec ma liste de commune (les noms des commune contiennent des accents)

ALTER TABLE maire ADD COLUMN commune_vector tsvector;

UPDATE maire SET commune_vector=to_tsvector(commune);

CREATE INDEX city_vector_idx ON film USING gin (commune_vector);

Le premier problème commence quand je fais une recherche avec la ville "chezery" je ne trouve rien

SELECT id_maire, commune FROM maire WHERE commune_vector  @@ to_tsquery('chezery');
 id_maire | commune 
----------+---------
(0 rows)

Alors que si je mets un accent, ça marche

SELECT id_maire, commune,commune_vector FROM maire WHERE commune_vector  @@ to_tsquery('Chézery');
 id_maire |    commune     |             commune_vector              
----------+----------------+-----------------------------------------
       58 | Chézery-Forens | 'chézery':2 'chézery-foren':1 'foren':3

cette situation
Justement, l'extension unaccent est sensée eviter  cela sad

#18 Re : Général » Auto completion » 25/07/2016 14:40:04

Me dire que c'est possible, c'est déjà pas mal smile

#19 Général » Auto completion » 25/07/2016 11:41:05

Postgres.0
Réponses : 13

Bonjour,

je cherche à faire de l'auto-complétion lors d'une insertion dans Postgres 9.5 à partir d'une application web (php).
J'ai regarder du côté de la recherche full texte, mais je n'ai pas trouvé grand chose.
Si quelqu'un peut m'aider ça serait top.


merci

#20 Re : Général » Problème Vacuum » 15/12/2015 18:37:40

Ce problème vient du fait que certaine transaction  en idle in transaction dure trop longtemps et empêche donc le vacuum d'aller jusqu'au bout.

#21 Général » Problème Vacuum » 15/12/2015 17:40:43

Postgres.0
Réponses : 2

Bonjour,

j'ai un problème en production PG 9.4, merci à ceux qui peuvent m'aider à le regler
Le vacuum n'arrive pas à supprimer les lignes mortes.
Ci-dessous la log postgres

VACUUM automatique de la table « mesure » : parcours d'index : 1
    pages : 0 supprimées, 512002 restantes
    lignes : 854702 supprimées, 29992847 restantes, 2301082 sont mortes mais non supprimables
    utilisation des tampons : 766926 lus dans le cache, 733287 lus hors du cache, 197832 modifiés
    taux moyen de lecture : 12.401 Mo/s, taux moyen d'écriture : 3.346 Mo/s

Pourquoi les lignes sont mortes mais non supprimable?

PS: quand je lance le vacuum manuellement rien ne change non plus

Merci

#23 Re : Général » Problème db_link PG 9.3 » 09/03/2015 11:52:38

Au fait, c'était tout simplement un problème de mot de passe.

#25 Général » Problème db_link PG 9.3 » 05/03/2015 11:50:02

Postgres.0
Réponses : 3

Bonjour,

sur un de mes environnements j'appelle une procédure:

SELECT * FROM  PROCEDURE(100);

ET la j'ai une erreur de ce type:

ERROR:  could not establish connection
DÉTAIL : FATAL:  password authentication failed for user "green01"
FATAL:  password authentication failed for user "green01"

CONTEXTE : SQL statement "SELECT dblink_connect('base_log','db_log')"
PL/pgSQL function p_log(text,text) line 18 at PERFORM
SQL statement "SELECT P_LOG('FIN ERREUR : ' || CHR(10) || sqlstate||' - '||sqlerrm,'PROCEDURE' )"
PL/pgSQL function PROCEDURE(bigint) line 233 at PERFORM

Cette erreur n'arrive que sur cet environnement.
Quelqu'un a t'il une idée?
Merci de votre aide.

Pied de page des forums

Propulsé par FluxBB