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 : Optimisation » [PostgreSQL 9.6/Postgis 2.3.2] Problème redémarrage après paramétrages » 19/09/2018 14:36:58

Bonjour,

Je viens de rencontrer le même problème que Cec_78.
J'ai donc désactivé les checkpont_segments dans le fichier de configuration de mon postgrès 9.6
Comme il est conseillé de remplacer le paramètre checkpoint_segment par max_wal_size j'ai regardé mon fichier de configuration mais ce paramètre n'y existe pas.
Comment ajouter ce paramètre ? L'éditeur de fichier de configuration de PgAdmin ne me permet pas d'ajouter de ligne... Il est possible de le faire dans un éditeur de texte sans tout planter ?

Merci pour vos retours.

#2 Re : Installation » Installation de l'extension postgres_fdw » 21/05/2018 17:29:12

Merci beaucoup pour votre réactivité.
Je n'avais pas grand espoir mais je tentais ma chance ! J'ai malheureusement les même craintes concernant l'espoir de voir l'extension ajoutée...

#3 Re : Installation » Installation de l'extension postgres_fdw » 21/05/2018 17:15:23

Bonjour,

Je reviens sur ce post car je suis confronté à un problème similaire sur un autre serveur mais distant cette fois-ci.
Il s'agit d'un serveur Postgres fourni par la plateforme Google. Problème, il s'avère que l'on ne peut pas ajouter les extensions que l'on veut et qu'en l’occurrence postgres_fdw n'est pas disponible.
Y a-t-il une autre façon d'ajouter postgres_fdw sur un serveur ?

Merci d'avance pour votre assistante.

#4 Re : Optimisation » Vacuum au sein de requêtes complexes » 21/11/2016 16:18:43

Tests réalisés.

En effet cela fonctionne parfaitement de cette manière, les vacuum sont acceptés.

Merci encore pour l'assistance.

#5 Re : Optimisation » Vacuum au sein de requêtes complexes » 08/11/2016 18:17:49

Je vais mener des tests !!!

Merci pour votre retour...

#6 Re : Optimisation » Vacuum au sein de requêtes complexes » 08/11/2016 18:00:54

Voici la commande type et le message renvoyé :

UPDATE cad_2016.edi_parc SET code_insee = (SUBSTRING(edi_parc.codcomm FROM 1 FOR 2) || SUBSTRING(edi_parc.codcomm FROM 4 FOR 6));
VACUUM FULL VERBOSE ANALYZE cad_2016.edi_parc;
ERREUR:  VACUUM ne peut pas être exécuté à partir d'une fonction ou d'une chaîne
contenant plusieurs commandes
********** Erreur **********

ERREUR: VACUUM ne peut pas être exécuté à partir d'une fonction ou d'une chaîne
contenant plusieurs commandes
État SQL :25001

Le tout réalisé au sein de pgAdmin

#7 Optimisation » vues matérialisées et accès via lien odbc » 08/11/2016 16:58:27

f.ravel
Réponses : 0

Bonjour,

J'utilise des lien odbc pour permettre l'accès, via ACCESS par exemple, à des données contenues dans un serveur postgres.

Les vues sont parfaitement visibles, mais les vues matérialisées ne le sont pas.

Existe-t-il une solution pour rendre les vues matérialisées visibles ?

La seule astuce que j'ai trouvé pour l'instant est de créer une seconde vue "normale" qui pointe sur la vue matérialisée. Je préfèrerais tout de même pointer directement sur les vues matérialisées.
Je suppose que c'est le lien odbc qui ne sait pas gérer les vues matérialisées ?

Merci d'avance pour votre aide

#8 Optimisation » Vacuum au sein de requêtes complexes » 08/11/2016 16:47:09

f.ravel
Réponses : 5

Bonjour,

J'aurais souhaité savoir s'il est possible d'inclure des vacuums au sein de requêtes complexes. Je m'explique :

Par exemple, je peux être amené à réaliser de multiples opérations de mises à jour de champs sur une même tables selon se principe : (ce qui me permet d'enchaîner de nombreuses opérations en un coup)

BEGIN;
requête_de_maj_1;
COMMIT;
BEGIN;
requête_de_maj_2;
COMMIT;
BEGIN;
requête_de_maj_3;
COMMIT;
etc...

Si les requêtes sont effectuées manuellement un à une, et avec des vacuums effectués manuellement eux aussi entre chacune d'entre-elles, le temps de calcul total prend un temps "t".

Si j'effectue la requête sous le modèle précédemment décrit le temps de calcul est beaucoup plus long "T" !!! Un vacuum final fait ressortir de très importantes quantités de lignes à supprimer : les lignes "inutiles" s'accumulent donc et les performances de calculs s'effondrent avec le temps.

Si j'essaie d'inclure des vacuums dans ma requête pgAdmin me répond que ce n'est pas possible.

Existe-t-il une méthode pour inclure des vacuums ou peut-être faire différemment ? (je m'y prend peut-être mal, je ne suis pas informaticien de formation)

Merci d'avance pour votre aide.

#10 Installation » Installation de l'extension postgres_fdw » 03/11/2016 13:57:21

f.ravel
Réponses : 5

Bonjour,

J'essaie d'installer l'extension postgres_fdw sur un serveur postgres 9.3, lui-même sur un serveur linux open suse.

Pour ce faire j'utilise la commande suivante :

CREATE EXTENSION postgres_fdw;

Mais problème !!! Voici ce que le serveur me retourne :

ERREUR: n'a pas pu ouvrir le fichier de contrôle d'extension « /usr/share/postgresql93/extension/postgres_fdw.control » : Aucun fichier ou dossier de ce type
État SQL :58P01

Je suppose qu'il doit manquer le/les fichiers relatifs à l'extension "postgres_fdw" dans ce dossier, mais comment les installers ?

D'avance merci pour votre assistance.

#11 Re : Général » Compter les lignes de toutes les tables d'une base de données » 28/07/2016 10:48:01

Une estimation est tout à fait suffisante.

Ça marche très bien, merci !!!

#12 Re : Général » Compter les lignes de toutes les tables d'une base de données » 28/07/2016 10:33:13

Ok, merci pour ce retour ultra rapide !

Je ne sais pas écrire le code en PLpgsql, je ne suis pas informaticien de formation. hmm

J'espérais que via une requête sur les tables ou sur les tables de statistiques il était possible de remonter ce genre d'information sans que ce ne soit trop compliqué.
En effet, quand on fait un clic droit sur un dossier "Tables" d'un schéma depuis pgAdmin et que l'on demande un "rapport des statistiques" cela nous remonte un tableau avec toutes les tables et notamment un champ "lignes vivantes" qui correspond bien au nombre de ligne des tables.

Au pire je peux me passer les schémas 1 à 1... y'en a 70. smile

Merci quand même !

#13 Général » Compter les lignes de toutes les tables d'une base de données » 28/07/2016 10:12:12

f.ravel
Réponses : 4

Bonjour,

J'ai une très grosse base de données : plusieurs 10aines de schémas, des centaines de tables.

J'aurais souhaité savoir comment faire pour compter les lignes de toutes les tables de ma base de données ?

Je sais comment compter les lignes d'une table, mais ne sais pas le faire sur toutes les tables d'un coup.

Merci d'avance pour votre aide !

#15 Re : Général » Trigger pour concaténer des tables » 13/07/2016 17:03:49

Merci pour le retour.

En effet ce peut être une très bonne solution.

Par contre, et de prime abord, je ne sais pas concaténer des tables via une requête, et donc une vue ?

#16 Général » Trigger pour concaténer des tables » 13/07/2016 10:37:27

f.ravel
Réponses : 4

Bonjour,

Je suis novice en matière de trigger, mais en m'appuyant sur un exemple j'ai essayé d'en mettre un en place pour concaténer des tables. Voici ce que je cherche à faire sur des tables identiques en matière de colonnes :

table1 - 500 lignes
table2 - 250 lignes
etc...

Je souhaite utiliser un trigger pour me retrouver avec :

table_concaténée - 750 lignes

Voici les différentes procédures que j'ai appliqué, pas d'erreur retournée, mais rien non plus dans la table d'agrégation :

--Création d'une fonction d'agrégation pour les tables multi_nb_gpdl
-- DROP FUNCTION public3.agreg_tables_multi_nb_gpdl();

CREATE OR REPLACE FUNCTION public3.agreg_tables_multi_nb_gpdl()
  RETURNS trigger AS
$BODY$
BEGIN
     IF (NEW.territoire='d06') THEN INSERT INTO public3.env_diff_09_14_d06_multi_nb_gpdl VALUES(NEW.*); RETURN NULL;
ELSIF (NEW.territoire='d13_177') THEN INSERT INTO public3.env_diff_09_14_d13_177_multi_nb_gpdl VALUES(NEW.*); RETURN NULL;
ELSE RAISE EXCEPTION 'Erreur code dpt'; END IF;
    
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public3.agreg_tables_multi_nb_gpdl()
  OWNER TO postgres;

--Création d'une table d'agrégation des tables "multi_nb_gpdl"
DROP TABLE IF EXISTS public3.env_diff_09_14_fr_multi_nb_gpdl
;

CREATE TABLE public3.env_diff_09_14_fr_multi_nb_gpdl
(
  id integer,
  surf integer,
  geom geometry,
  nlochab integer,
  nlogh integer,
  territoire character(50)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public3.env_diff_09_14_fr_multi_nb_gpdl
  OWNER TO postgres
;

CREATE TRIGGER env_diff_09_14_fr_multi_nb_gpdl_trigger
  BEFORE INSERT
  ON public3.env_diff_09_14_fr_multi_nb_gpdl
  FOR EACH ROW
  EXECUTE PROCEDURE public3.agreg_tables_multi_nb_gpdl();

Quelqu'un pourrait-il me dire ce que je ne fais pas correctement ?

Merci d'avance pour votre aide,

Fabrice.

#18 Re : Général » Valider les traitements réussis d'un enchaînement de requêtes » 06/07/2016 18:46:52

Merci beaucoup pour la réponse je teste ça de suite.

Cordialement

#19 Général » Valider les traitements réussis d'un enchaînement de requêtes » 06/07/2016 11:32:22

f.ravel
Réponses : 4

Bonjour,

Je réalise de très nombreux traitements en les enchaînant dans une seule requête :

Requête 1
;
Requête 2
;
...
;
Requête n

Dans cette configuration, si l'une des requêtes est en erreur, toute la chaîne de traitement est annulée dans son ensemble. Quand les calculs prennent des dizaines d'heures !!!

Est-il possible de mettre des sortes de balises qui permettraient de demander à Postgrès d'enregistrer en "dur" toutes les requêtes qui se sont déroulées correctement jusqu'à celle-ci ? Cela permettrai alors de ne relancer qu'a partir de la balise après laquelle un problème a été rencontré.
Voici la théorie :

Requête 1
;
Requête 2
;
BALISE D'ENREGISTREMENT
...
;
BALISE D'ENREGISTREMENT
...
Requête n

#20 PL/pgSQL » exporter tables postgis vers shape en batch » 27/06/2016 18:56:27

f.ravel
Réponses : 0

Bonjour,

J'utilise la ligne de commande pour exporter facilement des tables postgis vers des shape, par exemple :

pgsql2shp -f "d:/dvf_integrale_pgc_prix.shp" -h localhost -u postgres -P audcm dvf_cerema dvf_travail.rqte_dvf_integrale_pgc_prix

Cela fonctionne très bien.

Je souhaiterais maintenant pourvoir exporter des séries de tables vers des shape. N'étant pas informaticien de formation je ne sais comment m'y prendre, ni même si c'est possible. Mon objectif serait d'avoir une seule commande qui me permette d'exporter régulièrement plusieurs dizaines de tables... et m'éviter la saisie enchaînée des dizaines de commandes à la main !!!

Merci d'avance pour votre aide.

#21 Re : Optimisation » ptimisation de requête update » 18/02/2016 11:43:46

Ok :-)

En tous cas merci pour tout, vous m'avez enlevé une belle épine du pied !!! Désormais tout est franchement plus efficace, c'est le jour et la nuit.

#22 Re : Optimisation » ptimisation de requête update » 17/02/2016 18:58:17

Bonjour,

Alors, en effet le "BOM" est la source de la première erreur (« I »eUPDATE »). Et celle-ci venait bien de l'enregistrement via pgAdmin.
Et, parce que je pense que ça ne coûte rien d'être rigoureux dans ses requêtes, j'ai encadré chacune de mes requêtes d'un BEGIN - COMMIT. Depuis, tout tourne sans erreur !!! Super. smile

Résultat des courses et de tous vos précieux conseils :
- l'optimisation de la configuration de la base de données.
- l'optimisation du comportement des vacuums sur les tables éditées
- le passage en psql et les BEGIN/COMMIT
...ont énormément amélioré mes mises à jours. Une requête chaînée qui pouvait tourner pendant des jours... est traitée en quelques heures !!! Un grand merci à vous !!! big_smile

J'abuse peut-être, mais je vais quand même poser une dernière question smile sur le comportement actuel de ma requête psql (chaîne de mises à jours d'une même table).
D'après ce que j'observe via l'évolution de la fenêtre psql et le moniteur d'activité de pgAdmin :

BEGIN => début de la première transaction
Requête 1 => réalisation de la requête 1
COMMIT => fin de la transaction => initiation d'un vacuum automatique
BEGIN => début de la seconde transaction, alors que le vacuum est en train de se réaliser
Requête 2 => réalisation de la requête 2 en parallèle du vacuum
COMMIT...etc.

J'ai donc l'impression qu'à partir de la requête 2 celle-ci se réalise, au début, frontalement avec le vacuum (les deux sont visibles dans le moniteur d'activité de pgAdmin) et jusqu'à ce que celui-ci se finisse... ce qui fait sérieusement chuter les performance de mise à jour.
Le vacuum est nécessaire car sinon, au fur et à mesure des requêtes qui s'enchaînent, les performance s'effondrent.
Y-a-t-il un moyen de rendre le vacuum "exclusif" sans mettre à mal l'enchaînement des BEGIN suivants ?

#23 Re : Optimisation » ptimisation de requête update » 16/02/2016 19:53:08

Bonjour,

J'ai donc essayé d'appliquer vos différents conseils et réalisé de nombreux test... ce qui explique mon temps de réponse.
En effet, les BEGIN et COMIT sont sans effet dans pgAdmin.
Concernant psql je ne maîtrise vraiment pas beaucoup (désolé...) donc ça m'a pris un peu de temps pour arriver quelque peu à mes fins.


Premier test avec le Shell de psql et un fichier .sql contenant les commandes :
- Je réussi à me connecter à la base cadastre_test
- Je tape cette commande => \i d:\rqte_psql.sql -u postgres -w
- J'ai le message d'erreur suivant => d: : permission denied
- J'ai laissé tombé


Second test avec psql dans une invite de commande et le même fichier .sql de commandes :
- Je tape cette commande => psql -d cadastre_test -p 5432 -h localhost -U postgres -w -f d:\rqte_psql.sql
- La commande se lance mais un premier problème apparaît => erreur de syntaxe sur ou près de « I »eUPDATE » (ça sent les problèmes d'encodage ?) .... ATTENTION: aucune transaction en cours  ... COMMIT...
- La première ligne de mon fichier sql pose donc systématiquement problème, la 1ère transaction ne se fait pas, le 1er COMMIT arrive, je vois un vacuum s'effectuer sur la table à partir de la fenêtre "état du serveur" de pgAdmin (ce qui est une bonne chose), la seconde requête contenu dans mon .sql se lance par la suite car elle est visible dans l'état du serveur côté pgAdmin... SUPER !!!

Donc :
- Est-ce que je fait bien les choses en lançant mes commandes via mon rqte_psql.sql ? Faut-il faire différemment ?
- Si c'est bien la bonne méthode, pourquoi la première ligne dudit fichier pose systématiquement problème ? J'ai donc essayé de mettre les BEGIN en plus des COMMIT, l'erreur se produit alors avec I »eBEGIN mais au moins les UPDATE qui suivent se réalisent et la requête va jusqu'à son terme :-)

Désolé pour toutes ces questions mais tous ces outils ne sont vraiment pas simple d'usage de prime abord :-)

#24 Re : Optimisation » ptimisation de requête update » 15/02/2016 18:44:32

Bonjour,

J'ai donc mené de nombreux tests pour optimiser et essayer de mieux comprendre le fonctionnement de postgrès à l'aide de tous vos conseils.

Requête utilisée pour les tests :

UPDATE cad_2015.edi_parc_uf
  SET age_prop_dest_av_imp_2015 = 2015 - dat_nais_prop_dest_av_imp
WHERE dat_nais_prop_dest_av_imp IS NOT NULL
  AND dat_nais_prop_dest_av_imp <> 0
;
UPDATE cad_2015.edi_parc_uf
SET type_prop = 'NR'
;
UPDATE cad_2015.edi_parc_uf
  SET type_prop = edi_parc.type_prop
FROM 
  cad_2015.edi_parc
WHERE 
  edi_parc.id_uf = edi_parc_uf.id_centr
;
UPDATE cad_2015.edi_parc_uf
SET nom_prop_desti_av_imp = 'NR'
;
UPDATE cad_2015.edi_parc_uf
  SET nom_prop_desti_av_imp = edi_parc.nom_prop_desti_av_imp
FROM 
  cad_2015.edi_parc
WHERE 
  edi_parc.id_uf = edi_parc_uf.id_centr
;

1) Tout manuel
J'ai donc commencé par refuser les autovacuum sur la table à mette à jour

ALTER TABLE cad_2015.edi_parc_uf SET (
  autovacuum_enabled = FALSE;

J'ai ensuite exécuté mes différentes requêtes unes à unes en les sélectionnant dans pgAdmin. Après chaque exécution j'ai lancé un vacuum analyze. Les résultats sont très bons et chaque requête prend de 10 à 35 minutes pour se réaliser, en 1h30 tout est fait. (personnellement ça me convient très bien en termes de performances, mais pas à l'usage, de nombreuses requêtes de ce type à lancer).


2) Tout automatisé - test 1
Même configuration que précédemment, sauf que j'ai lancé toutes les requêtes d'un coup. Là c'est a nouveau sans fin... j'ai fini par stopper la requête au bout de plusieurs heures. Les performances de postgrès s'effondrent. Aucun vacuum pour autant de requêtes enchaînées sur cette même table n'est vraiment pas une bonne idée.

relname	    n_tup_upd	n_live_tup	   last_autoanalyze	last_autovacuum	autovacuum_count	autoanalyze_count
edi_parc_uf   7035669	0			                                            0	                        0

3) Tout automatisé - test 2 (vacuums peu fréquents)
Cette fois-ci test de paramétrage des vacuums de la table :

ALTER TABLE cad_2015.edi_parc_uf SET (
  autovacuum_enabled = TRUE,
  autovacuum_vacuum_scale_factor = 1,
  autovacuum_analyze_scale_factor = 1,
  autovacuum_vacuum_threshold = 3000000,
  autovacuum_analyze_threshold = 3000000
);

Résultats identiques au point 2), mauvaise idée également.
J'en ai relancé un autre avec des valeurs un peu moins élevées mais sans plus de succès. Requête stoppée.
Pour info :

relname	    n_tup_upd	n_live_tup  	last_autoanalyze	                last_autovacuum	                    autovacuum_count       autoanalyze_count
edi_parc_uf   11092034      3002889	      2016-02-12 11:56:03.3+01         2016-02-12 11:47:51.423+01                2                    1

4) Tout automatisé - test 3 (vacuums fréquents)

ALTER TABLE cad_2015.edi_parc_uf SET (
  autovacuum_enabled = TRUE,
  autovacuum_vacuum_scale_factor = 0.01,
  autovacuum_analyze_scale_factor = 0.01,
  autovacuum_vacuum_threshold = 20000,
  autovacuum_analyze_threshold = 20000
);

Résultats identiques au point 2), la requête tourne depuis plus de 3 heures...

J'ai comme l'impression que cet enchaînement de requêtes, tant qu'il ne s'est pas intégralement réalisé :
  - verrouille la tables,
  - que les autovacuum ne peuvent s'effectuer qu'après libération de ces vérous
  - et que, donc, on se retrouve dans la même situation que pour le 2) ??? 

Dans l'absolu j'aurais pu insérer des vacuums dans mon fichier de requêtes pour qu'elles se réalisent comment dans mon cas 1) mais les vacuum ne sont pas tolérés dans cette configuration... à moins que je ne m'y prenne pas correctement.

Comment faites-vous pour mettre à jour de grosses bases de données, sur de nombreux champs ? Comme moi avec mes requêtes enchaînées... ou bien totalement différemment ?

#25 Re : Optimisation » ptimisation de requête update » 11/02/2016 19:13:09

Merci pour vos conseils, je vais m'y plonger demain, aujourd'hui je n'ai ou y travailler.

Pied de page des forums

Propulsé par FluxBB