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

#3226 Re : Général » pg_dump et restore pour beotien » 02/11/2011 23:42:28

Juste un petit détail : je vous recommande d'éviter l'utilisation de l'option -f et d'utiliser plutôt la redirection de la sortie standard (pgdump > /home/.../fic), car lors du pg_restore, l'option -f n'a pas du tout la même signification et peut porter à confusion.

#3227 Re : Optimisation » Probleme effective_cache_size » 26/10/2011 20:19:51

gleu a écrit :

Ainsi, une grosse valeur aura tendance a diminuer l'utilisation des index, l'accès disque étant rendu plus rapide.

Non, c'est le contraire. Avec une grosse valeur, l'index a plus de chance d'être en mémoire avec la table... donc plus de chances d'utiliser un index.

Effectivement, encore un truc que j'avais compris de travers ^^

#3228 Re : Optimisation » Probleme effective_cache_size » 26/10/2011 19:42:57

Le paramètre effective_cache_size donne a postgresql un moyen de déterminer si une donnée qui n est pas dans le cache postgres a des chances d'être dans le cache disque du système d'exploitation.
Ainsi, une grosse valeur aura tendance a diminuer l'utilisation des index, l'accès disque étant rendu plus rapide.

Vous devriez voir un changement de plan d'exécution dans le explain qui vous permettra de voir où se trouve le problème.

De plus, après un redémarrage du serveur il est probable que les données ne soient pas dans le cache système, le gain en performance ne sera alors visible qu'une fois les données remontées dans le cache système.

Une augmentation de plus de 10 minutes est à première vue déraisonnable. Si aucun verrou ne bloque l'accès cela peut être le signe de statistiques non à jour conduisant à de très mauvais plan d'exécution. Bref, il faut chercher dans plusieurs directions.

Pour les autres paramètres de configuration, le plus important est sans doute le shared_buffers qui dimensionne le cache postgresql et contribue le plus au gain de performance. Si vous êtes sous windows, il est par contre déconseillé de le passer à plus de 512MB.

#3229 Re : PL/pgSQL » Recherche du premier et du deuxième d'une liste » 26/10/2011 18:48:58

Pour être sur du résultat, il faut également que votre requête source utilise un order by.

Il est possible de faire ça avec un auto-join, mais les performances risquent d'être catastrophique sur une grosse table.

Grosso modo, ça serait une requête de ce genre :

SELECT c2,c3 FROM (
  SELECT t1.c2,t1.c3, COUNT(*) as rang
  FROM table t1, table t2
  WHERE t1.[CHAMP TRI] >= t2.[CHAMP TRI]
  GROUP BY t1.c2,t1.c3
  ORDER BY rang
) sql
WHERE rang <3

#3230 Re : Général » BLocage Postgres 8.4.4 » 26/10/2011 15:10:25

Bonjour.
Que donne la vue pg_stat_activity lors du drop constraint ? La requête est-elle bloquée ? (waiting = true)

#3231 Re : Général » Recuperation de lignes non bloquées sur une table » 26/10/2011 14:22:33

Je pense que chacun le fait avec sa propre méthode.

Le seul problème d'avoir une colonne indiquant que la ligne est bloquée, c'est qu'il faut que la mise à jour de cette colonne se fasse hors du traitement, sinon la valeur ne sera pas visible hors de la transaction et donc pour les autres traitements, ce qui peut complexifier le programme.

#3232 Re : PL/pgSQL » Recherche du premier et du deuxième d'une liste » 26/10/2011 12:15:34

Bonjour,
si vous êtes en Postgresql 9.0 ou supérieur, vous pouvez le faire facilement avec les fonctions window

Pour votre exemple :

SELECT DISTINCT "Champ1",min("Champ2") OVER (PARTITION BY "Champ1")
FROM table

Pour avoir les 2 premières  valeurs de chaque Champ1, il faut imbriquer une requête :

SELECT "Champ1","Champ2" FROM (
  SELECT "Champ1","Champ2", row_number() OVER (PARTITION BY "Champ1" ORDER BY "Champ2") as rang
  FROM table
) sql
WHERE rang < 3

Edit : Oups, j'ai lu trop vite. Pour renvoyer la première valeur ou les 2 premières valeurs, il est necessaire d'avoir un champ supplémentaire (créer la table avec un oid ou avec un serial), sinon la requête ne pourra pas ramener forcément les même enregistrements, les données n'ayant pas réellement d'ordre. Il faut donc ensuite adapter les fonctions window avec le min ou le order sur le champ serial ou oid.

#3233 Re : Général » Recuperation de lignes non bloquées sur une table » 26/10/2011 11:16:53

Il faut joindre le transactionid de la vue pg_locks avec le xmax de la table pour avoir la ligne bloquée je pense.

#3234 Re : Général » Recuperation de lignes non bloquées sur une table » 26/10/2011 10:23:24

Bonjour.
Il n'y a pas d'autre moyen que pg_locks pour connaitre le verouillage des ligne d'une table.

Vous pouvez sinon utiliser un where  pour essayer paralléliser rapidement les traitements (par ex, s'il y a un champ séquence un modulo avec le nombre de processeurs sur la séquence) ou LIMIT et OFFSET.

Vous pouvez également utiliser l'option NOWAIT du SELECT FOR UPDATE dans une boucle et gérer l'exception en cas d'erreur, ce qui vous permettra de continuer le traitement, mais dans ce cas il sera peut-être dur de s'assurer que chaque ligne n'est traitée qu'une seule fois.

#3235 Re : Java » Retourner plusieurs lignes d'une table grace à une procédure stockée » 25/10/2011 16:01:01

Oui c'est possible, mais il ne faut pas passer par des paramètres retour mais par un RETURN SETOF record

#3236 Re : Installation » Problème installation PG 8.4.1 - répertoire data » 25/10/2011 15:59:10

A priori non, sauf si la partition n'est pas visible pour l'utilisateur postgres.
Pouvez-vous ouvrir une session sur le serveur en tant que postgres et vérifier que le disque D et le répertoire data_pg_84 sont bien présent ?

#3237 Re : Installation » Installation option DBLINK sur Postgresql 9.1 RC1 » 25/10/2011 12:57:47

Normalement, le répertoire $libdir est le répertoire de l'exécutable postgres/lib.
Dans votre cas, cela aurait été /usr/local/pgsql/9.1_RC1/lib

Il aurait également fallu compiler dblink pour avoir le binaire (dblink.so) qui peut ensuite être utilisé par postgres.
Si vous installez la 9.1 et les contrib, vous devriez avoir directement tous les fichiers binaires utilisables, et un simple CREATE EXTENSION dblink; devrait fonctionner immédiatement.

#3238 Re : Installation » Problème installation PG 8.4.1 - répertoire data » 25/10/2011 12:50:54

Je crois que SAS proposait de remplacer le / par un \, mais ça ne pose pas de soucis normalement.

Sinon le disque D est-il un disque physique ? Et est-il accessible par l'utilisateur lançant le service postgresql ?

A priori il n'y a pas de raison que le service ne se lance pas. L'erreur se reproduit toujours si vous relancez le service ?

#3239 Re : Installation » Problème installation PG 8.4.1 - répertoire data » 25/10/2011 12:08:42

Sans plus d'information c'est dur de répondre.
Pouvez-vous faire un copier-coller de la ligne de commande du service, de l'erreur de l'observateur d’évènements ainsi que des fichiers présents à la racine et des répertoires dans le répertoire data ?

#3240 Re : Installation » Installation option DBLINK sur Postgresql 9.1 RC1 » 25/10/2011 12:02:51

Bonjour.
Le dblink.sql contient la création de l'extension dblink :

CREATE EXTENSION dblink;

C'est cette commande qui va vous installer dblink sur le serveur.

#3241 Re : Installation » Problème installation PG 8.4.1 - répertoire data » 25/10/2011 11:35:16

Vous pouvez toujours essayer de lancer l'initdb à la main.
Il faut créer le répertoire data si vous l'avez supprimé, mettre l'utilisateur postgres avec les droits d'écriture, peut-être tous les droits, et lancer l'initdb en tant que votre utilisateur postgres.

initdb.exe -D "D:\pg_data"

#3242 Re : Installation » Problème installation PG 8.4.1 - répertoire data » 25/10/2011 10:42:42

Bonjour.
A première vue, il semblerait que l'initdb n'a pas pu se lancer car le répertoire d:\PostgresData existait déjà ou n'était pas vide.

correction des droits sur le r‚pertoire existant D:/PostgresData... ok
cr‚ation des sous-r‚pertoires... initdb : n'a pas pu cr‚er le r‚pertoire ® D:/PostgresData ¯ : File exists

#3243 Re : Optimisation » Optimisation [suite] - lecture analyze » 23/10/2011 18:55:48

Cela peut influer, autant peut être pas. Si vous êtes sur un portable avec des disques en 5400 tour ou du sas changera le coefficient. Après, il y avait peut être un verrou ou qqc qui bloquait.
Comme je vous disais l'option buffers est une première piste pour voir si c'est la seule chose qui influe.

#3244 Re : Optimisation » Optimisation [suite] - lecture analyze » 22/10/2011 17:33:14

Bonjour.

Il n'y a pas un cache de requête mais un cache de donnée. Grosso modo, lors d'une requête, si les données se trouvent dans le cache alors postgres n'a pas besoin de les lire du disque, et la requête est donc plus rapide à exécuter, le changement de durée dépendant de la vitesse disques.

Pour voir cela, vous pouvez utiliser l'option buffers du explain, qui vous dira si les blocs sont lus en mémoire (hit) ou sur disque (read).

explain (analyze,buffers) select count(*) as col_0_0_ from snsrBroadcast broadcast0_ where broadcast0_.gateway_id='52910199' limit 2

#3245 Re : Général » Coder en PL/pgSQL sans passer par la création d'une fonction » 21/10/2011 00:00:49

Je crois que les procédures pl/pgsql sont compilées en interne par Postgresql au premier appel et à chaque fois qu'elles sont modifiées, sans doute quelqu'un de plus connaisseur sur ces points techniques pourra vous le confirmer ou en dire plus. En tout cas ce code est bien sur multi plateforme.

Les procédure en pl/c sont utilisée via des fichiers binaires (.dll, .so), donc du code compilé.
Pour les autres langages (pl/perl etc) je n'ai jamais eu l'occasion d'en utiliser et ne m'avancerai donc pas.

Pour apprendre à faire du pl/c, la doc officielle donne une très bonne base de départ pour ça : http://docs.postgresql.fr/9.1/xfunc-c.html
Cela dit, il y a vraiment un gain à faire une procédure en pl/c s'il y a beaucoup de calculs et traitements internes, une simple suite d'appels à des requêtes ne changera presque rien.

#3246 Re : Général » Coder en PL/pgSQL sans passer par la création d'une fonction » 20/10/2011 22:42:16

1. J'ai vu que PostgreSQL permettait de coder en C, Perl, Python etc... y a t-il beaucoup de personne codant avec ces langages ?

Coder en pl/c permet d'avoir un gros gain de performance, accès à beaucoup plus de fonctionnalités (création d'aggrégats par exemple) mais on perd une certaine souplesse, code compilé spécifique à une plateforme, il faut recompiler pour en changer voire faire des adaptations, pas de visibilité du code en direct etc.
Pour le perl, python etc ça permet d'avoir plus de liberté sur le serveur (gestion de fichier etc) et de garder un langage qu'on aime pour le faire, avec encore une fois plus de performance.
La plupart des contrib sont codés dans ces langages (les langages visible dans le fichier sql d'installation si vous êtes curieux)

Pour le reste, désolé mais je n'y connais rien ^^

#3247 Re : Général » Coder en PL/pgSQL sans passer par la création d'une fonction » 20/10/2011 20:00:45

Bonsoir.
Non, il n'est hélas pas possible de faire ça.

Cela dit la syntaxe de création d'une fonction n'est pas ce qui vous prendra le plus de temps dans le développement smile

Un petit lien pour les astuces de développement en Pl/PgSQL :
http://docs.postgresql.fr/9.1/plpgsql-d … -tips.html

#3248 Re : Réplication » Connection lente » 19/10/2011 15:16:06

Bonjour.
Si le serveur ne doit servir que d'intermédiaire entre les 2 autres serveur, c'est alors plutôtde la réplication en cascade qui sera disponible normalement en 9.2

La réplication native de postgresql ne permet pas de multi-maître, et de mémoire il n'existe que bucardo qui permette de le faire.
Slony permet de gérer plusieurs serveurs en écriture, du moment que les données répliquées ne sont pas écrites sur le serveur répliqué.

Sinon, avoir une réplication entre 2 serveurs et une liaison lente n'est franchement pas une bonne idée, et la solution de votre directeur ne ferait qu'ajouter un lag sur le 3eme serveur je pense.

#3249 Re : Installation » Problème d'installation postgresql-911-1 x64 sur windows serv 2008 x64 » 17/10/2011 16:23:50

Après test de l'installeur, il semblerait qu'il suffise de créer avant le lancement de l'installeur un utilisateur "postgres" sur votre serveur (non administrateur) et ensuite de spécifier son mot de passe lors de l'installation.

Si cela ne marche toujours pas, il faudra regarder si des traces dans l'observateur d’évènement ou un fichier log est disponible pour avoir plus d'information sur l'erreur retournée.

#3250 Re : Installation » Problème d'installation postgresql-911-1 x64 sur windows serv 2008 x64 » 17/10/2011 14:44:55

Je n'ai pas utilisé l'installeur one-click depuis longtemps, mais il me semblait que l'on pouvait choisir entre créer un utilisateur spécifique pour postgres ou en utiliser un déjà existant.

Sinon, avez-vous installé le Visual C++ Redistributable Package 64 bits ?
http://www.microsoft.com/download/en/de … x?id=14632

Il se peut que le problème vienne de là.

Pied de page des forums

Propulsé par FluxBB