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

#351 Re : Général » Vacuum full réalisé ou pas ? » 03/10/2013 17:32:08

Cette ligne:

2013-09-29 03:26:24 EAT [14674]: [19-1] user=postgres,db=geo [local] LOG:  duration: 6081940.220 ms  statement: VACUUM (FULL, ANALYZE);

indique que le vacuum full a bien été fini.

N'y aurait-il jamais d' autovacuum ?

autovacuum_count à 0 indique que non, autovacuum n'a rien fait sur cette table.

Avec le autovacuum_vacuum_scale_factor par défaut à 0.2, il faut que plus de 20% des lignes aient modifiées/effaçées pour qu'autovacuum s'occupe de la table (à strictement parler il y a aussi autovacuum_vacuum_threshold mais sur une grosse table son influence est insignifiante).

Et dans le cas présent où un VACUUM FULL est fait régulièrement, logiquement ces  20% modifiés sont comptés depuis le dernier VACUUM FULL. Si bien que si moins de 20% de la table change d'un dimanche à l'autre, il est normal que l'autovacuum n'ait jamais l'opportunité de s'en occuper.

#352 Re : Général » impossible d'utiliser password pour se connecter, seul trust marche » 01/10/2013 11:59:04

bofxyz a écrit :

J'utilise pgadmin3 sur osx7.5

J'ai changé le mot de passe du rôle de connexion avec pgadmin3.

Certaines versions diffusées de pgadmin ont un bug connu qui positionne une date de validité du mot de passe dans le passé au moment de le changer.
Dans ce cas il est impossible de se connecter avec les méthodes requérant un mot de passe.

Faire

SELECT usename,valuntil FROM pg_user;

pour vérifier et

ALTER USER  nomuser VALID UNTIL 'infinity';

pour corriger si besoin

Le bug est mentionné dans le changelog:
http://www.pgadmin.org/development/changelog.php

2012-11-28 AV 1.16.1 Date picker controls returns a full timestamp by default, which can cause inadvertent date changes on jobs and role validty dates. Ignore the time part.

#353 Re : Général » [résolu] Usage de lo_import et lo_export depuis Xcode » 02/06/2013 19:45:47

Oui il faut être superuser comme dit le message d'erreur.
Puisque ça passe avec pgAdmin, ça passera dans l'application en utilisant le même compte.

#354 Re : Général » [résolu] Usage de lo_import et lo_export depuis Xcode » 02/06/2013 19:25:30

Sans connaître ce framework pour OSX, ça ne parait pas anormal qu'il n'y ait pas de recordset en retour d'un INSERT qui ne retourne pas de résultat.

Que se passe-t-il s'il y a une clause RETURNING à cet INSERT pour récupérer un résultat, du style:

insert into images values (lo_import('/pg-imgs/titi.jpg')) returning image

#355 Re : PHP » Problème de guillemets lors d'une insertion » 16/01/2013 02:11:36

Ca ressemble à une mauvaise prise en compte de standard_conforming_strings.
Voir la doc à ce sujet: http://docs.postgresqlfr.org/9.1/sql-syntax.html


En 9.1, standard_conforming_strings est à ON par défaut alors qu'en 8.4 il était à OFF.
Mais le code montré avec le sprintf() est correct. Il doit fonctionner en 8.4, en 9.1 et quelque soit
la valeur de standard_conforming_strings, parce que  pg_escape_string() fait ce qu'il faut dans tous les cas de figure.


Sinon il faut faire attention en PHP à désactiver les "magic quotes"
(voir http://php.net/manual/fr/security.magicquotes.php) qui  transforment les champs
des posts pour y ajouter des antislashs et qui entrent justement en conflit avec l'échappement explicite.
Voir pour ça voir la valeur de get_magic_quotes_gpc()

#356 Re : Général » seq pour chaque code » 04/01/2013 20:18:18

En PostgreSQL moderne (>=8.4) on peut utiliser row_number() plutôt que des séquences ou du code:

select  departement||'-'||row_number() over ( partition by departement) FROM ....

#357 Re : Général » Probleme insertion de champs vide dans une colonne date » 12/12/2012 19:20:07

De toute façon comme TRIM('') vaut toujours '' le CASE n'a pas lieu d'être.
VALUES(1,now()) fera la même chose.

#358 Re : PL/pgSQL » requête avec apostrophe dans variable » 22/10/2012 16:41:54

Ca dépend du langage de programmation où varcommune est défini, chaque langage de programmation ayant ses propres méthodes pour injecter une variable dans une requête.

Si le langage est plpgsql, on utilisera plutôt USING ou en second choix la fonction quote_literal.
Si c'était du C on utiliserait la fonction PQescapeStringConn, si PHP pg_escape_string etc...

#359 Re : Installation » Xubuntu 12.04 et PostgreSQL j'ai DEUX psql » 17/09/2012 16:50:18

En principe la première chose à regarder pour des problèmes serveur postgresql sous Ubuntu est le fichier de log le plus récent dans /var/log/postgresql.
Il y a souvent des infos qui permettent d'orienter rapidement vers la raison du problème.

Pour une connexion en local sous Ubuntu, il faut savoir qu'il y a différentes variantes qui ont chacune leurs propres problèmes potentiels:


1- via Unix domain socket, dans ce cas c'est un fichier socket qui sert de point de communication entre client et serveur, par défaut c'est /var/run/postgresql/.s.PGSQL.5432 mais si ça diffère il est de la responsabilité du programmeur de se connecter au bon endroit via le paramètre host de la connexion qui fait partie des nombreuses options indiquables à au pg_connect() du php ou équivalent PDO. Voir la doc de libpq pour toutes les infos utiles à ce sujet.


2- via TCP/IP sur localhost en IPv4  avec SSL. Malheureusement sur Ubuntu le cryptage SSL est activé par défaut (malheureusement car ça consomme du CPU  pour rien). S'il y a un problème de droits sur les certificats par exemple, ça empêche de se connecter.


3- via TCP/IP sur localhost en IPv4 sans SSL. Autant utiliser #1 qui est  théoriquement plus efficace.


4. comme #2 mais en IPv6. Parfois on se connecte en IPv6 sans le savoir parce que /etc/hosts définit localhost en ::1 au lieu de 127.0.0.1 . Et parfois ça ne marche pas parce que l'IPv6 n'est pas complètement supporté.


5. comme #3 mais en IPv6.

#360 Re : PHP » Installer bibliothèque postgresql de PHP5 sur mac » 03/09/2012 16:04:52

RBG a écrit :

Activé Apache2 natif de mon OS 10.6, installé PHP 5.3.8, créé la page test qui est recommandée avec le package, essayé d'autres pages php, çà marche, au moins en local

Un package mais lequel? La doc de PHP en mentionne déjà 4 différents pour MacOS X:
http://www.php.net/manual/fr/install.ma … ckages.php
et il y en a certainement d'autres.

Pour activer le module postgresql dans php, Il faudrait idéalement se référer aux instructions spécifiques du package en question, chaque package ayant ses propres chemins et méthodes.

#361 Re : Général » [Résolu]Recherche hébergement mutualisé pour back-office » 27/08/2012 15:46:02

Il se pourrait que https://www.alwaysdata.com/ colle à ton besoin.
C'est français,  PostgreSQL 9.0 mutualisé avec accès à la base de l'extérieur.

#362 Re : Général » Caractères accentués dans psql » 23/08/2012 11:25:09

LD_PRELOAD=lib/libreadline.so.5 psql
ERROR: ld.so: object 'lib/libreadline.so.5' from LD_PRELOAD cannot be preloaded: ignored.

C'est parce qu'il mangue le / initial au début de /lib...

Mais de toute façon, pour le LD_PRELOAD, avec la version 129 de postgresql-common, en principe ça le fait déjà automatiquement.
Il faut simplement que le package libreadline5 soit installé. C'est apparemment la solution la moins inélégante trouvée en attendant que libedit soit assez évolué pour bien gérer les accents.


Par ailleurs les locales installées comprennent à la fois de l'ISO-LATIN et de l'UTF8 en plus de la locale C qui ne gère pas les accents, ce qui est courant pour un système français mais ça oblige à bien vérifier que le terminal est configuré dans la même locale que psql (faire locale tout seul sans -a pour vérifier la locale courante sous le shell, puis show client_encoding sous psql pour voir si c'est compatible).

#363 Re : Général » Caractères accentués dans psql » 21/08/2012 23:50:00

La première chose est de vérifier que la locale utilisée dans le terminal est bien compatible avec des accents.
Voir le résultat sous shell avant de lancer psql de la commande:

locale -a

Mais il se peut aussi que l'impossibilité de saisir des accents vienne de ce problème:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=608442

Ubuntu utilise les mêmes packages que Debian pour PostgreSQL et subit généralement les mêmes bugs.

En appelant psql comme ça:

LD_PRELOAD=lib/libreadline.so.5 psql [options]

ça doit contourner le problème. Mais en principe c'est déjà fait automatiquement si le package postgresql-common a une version supérieure à 114 (EDIT: et que libreadline est installé)

Pour vérifier, voir le résultat de:

dpkg -l postgresql-common

#364 Re : C et C++ » Problème d’exécution d’un progamme ecpg (postgresql 8.4.10 ) » 08/06/2012 21:42:26

En version 8.2 ECPG injecte certainement  le paramètre dans la requête, sans utiliser le PREPARE côté serveur.
Mais depuis 8.3, ECPG utilise le PREPARE côté serveur (voir les notes de version de la doc).


Or le vrai PREPARE est strict sur ce qui peut être paramètre ou pas, en gros seuls les litéraux peuvent être des paramètres. DAYS étant  un mot clef et non un litéral, l'expression "360 DAYS" ne convient pas comme paramètre.

C'est un problème, les autres interfaces comme PDO ou DBD::Pg qui ont opté pour les PREPARE côté serveur ont le même.


La solution est de faire en SQL:

PREPARE stmt_X as SELECT ( now()- $1 * '1 day'::interval )::varchar

et de passer juste le nombre de jours dans le paramètre, sans "DAYS" évidemment.

#365 Re : Général » lc_messages à 'en_US.UTF8' mais traces du VACUUM en français ? » 01/06/2012 17:09:54

roya a écrit :

Merci d'avoir continué à investiguer.
J'ai fait de même de mon côté, et j'ai aussi reproduit le problème sur une seconde VM SLES avec le français en langue d'installation.
L'idée étant de pouvoir utiliser pgfouine, je vais me contenter de positionner la variable OS "LC_MESSAGES" au préalable.

Mais ces termes en français sont dans les logs côté client et non serveur donc en principe pgfouine n'est pas concerné.

#366 Re : Général » lc_messages à 'en_US.UTF8' mais traces du VACUUM en français ? » 01/06/2012 16:55:59

gleu a écrit :

Non, pas vraiment. La langue des traces du serveur n'ont rien à voir (normalement) avec la configuration du terminal qui lance psql.

Et pourtant c'est bien reproductible. Sur un PG9.1 configuré en_US.UTF8:

LC_MESSAGES=fr_FR.UTF8 psql -d test << EOF
show lc_messages;
VACUUM verbose;
EOF

sort

 lc_messages 
-------------
 en_US.UTF-8

suivi de diverses lignes de la forme:

INFO:  vacuuming "pg_toast.pg_toast_11523"
INFO:  index "pg_toast_11523_index" now contains 0 row versions in 1 pages
DÉTAIL : 0 index row versions were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.00u sec elapsed 0.00 sec.

Avec tout en anglais, sauf DÉTAIL avec son accent.

Je pense que c'est parce que DETAIL ne fait pas vraiment corps avec la sortie de VACUUM VERBOSE, c'est un ajout du client psql sur le niveau de cricité du message (notice,info,avertissement, etc...)

PS: mais ce sont des logs côté client, donc ce n'est pas supposé être analysé avec pgfouine?

#367 Re : Général » HashAggregate to slow » 29/05/2012 21:11:08

Postgres.0 a écrit :

Le CLUSTER ne marche pas chez moi,  pourtant je suis ssur la 9.1.
Peut-être que c'est par ce que ma table est une partition!

Ou bien c'est pour la raison indiquée dans le message d'erreur que nous ne pouvons pas deviner, faute d'être télépathe.

#369 Re : Général » HashAggregate to slow » 29/05/2012 14:04:35

Postgres.0 a écrit :

Qu'exst ce que je peux faire pour améliorer le comportement du index scan?

D'après les 2 explain analyze, le problème est lié à la lenteur de lecture de l'index quand les données viennent du disque (9800ms vs 5ms)
Il y a diverses hypothèses et solutions correspondantes, qui ne sont pas mutuellement exclusives:


1) l'index est trop désorganisé: faire un REINDEX  sur par_ag_idx10


2) la table est trop désorganisée: faire un CLUSTER de la table sur par_ag_idx10 pour la réécrire dans le même ordre que l'index.


3) il n'y a pas assez de mémoire pour que suffisamment de données soient en cache: augmenter la RAM et shared_buffers


4) le ou les disques sont trop faibles par rapport aux quantités de données à brasser: booster le sous-système disque

#370 Re : Général » Insertion multiple et update » 18/04/2012 18:21:47

Gold.Strike a écrit :

Il faut que je trouve maintenant comment remplir ce tableau : suffit il de passer un tableau d'entier en C# comme paramètre pour qu'il soit traité dans la fonction plsql?

Il ya 2 options: soit arranger les valeurs directement dans la requête sous forme de tableau, exemple

select multi_upsert(array[7,3,-3,2], array[1,2,3,4]);

soit utiliser le passage en paramètre de tableaux C# avec Npgsql, puisque c'est visiblement géré d'après la doc:
http://npgsql.projects.postgresql.org/d … anual.html
(chapitre "Working with arrays")


Enfin, comment puis je relever toutes les exceptions rencontrés, afin de les faire remonter pour les loguer depuis mon application?

A la première exception, la transaction va être annulée et l'erreur remontée à l'appelant, c'est le comportement par défaut.

#371 Re : Installation » Installation postgresql-9.1 sur ubuntu hebergant postgresql-8.4 » 17/04/2012 02:44:29

Les erreurs "could not change directory to /root" se résolvent en faisant
su - postgres au lieu de  su postgres


Le "WARNING: psql version 8.4, server version 9.1." est dû au fait que le cluster par défaut sur le système est 8.4/main
Pour se mettre dans l'environnement de la 9.1, les 2 solutions les plus simples sont:

1) ajouter un argument

psql --cluster 9.1/main ...

2) créer la variable d'environnement:

export PGCLUSTER=9.1/main

Il y a encore d'autres solutions avec des fichiers de config évoqués dans la doc en ligne  (faire man pg_wrapper)

#372 Re : Général » Insertion multiple et update » 14/04/2012 15:17:57

Le MERGE en masse est faisable  par un UPDATE multiple + INSERT multiple pour toute une collection de valeurs, dans une fonction procédurale, les paramètres des requêtes étant passés  dans des tableaux.

Voici un exemple pour des données de type clef/valeur dans une table a(id int primary key, val int).
Les valeurs à insérer ou remplacer sont passées dans arrval et les clefs dans arrkey (ces tableaux doivent impérativement être de taille identique pour que les unnest() des sous-requêtes sortent les valeurs alignées côte à côte).

CREATE FUNCTION multi_upsert(arrval int[], arrkey int[]) returns void as $$
begin
  UPDATE a SET val=s.v FROM
    (SELECT unnest(arrval) as k,unnest(arrkey) as v) s
    WHERE id=s.k;

  INSERT INTO a(id,val) select k,v
    from (SELECT unnest(arrval) as k,unnest(arrkey) as v) s
      WHERE not exists(select 1 from a where id=s.k);

end
$$ language plpgsql;

Cette fonction ne gère pas le problème les mises à jour concurrentes, mais le code C# montré ne le faisant pas non plus, ce n'est apparemment pas nécessaire. Sinon on pourrait ajouter un réessai sur EXCEPTION comme dans la doc de postgres ou un verrouillage explicite  avant l'INSERT.

Côté performance, le gain à espérer est important par rapport à la séquence INSERT-UPDATE dans le code client,  du fait non seulement du groupement en deux requêtes, mais surtout de la réduction au minimum des aller-retours client-serveur sur le réseau, surtout si c'est un vrai réseau  (pas localhost).

#373 Re : Général » Procédure avec utilisation de WITH » 13/04/2012 21:18:53

C'est dû potentiellement à l'erreur classique du paramètre de fonction qui a le même nom qu'une colonne utilisée dans la requête. (ici idauge)
Essaie en changeant le nom du paramètre.

#374 Re : C et C++ » Compiler libpqxx sous Windows 7 avec MSVC11 » 12/04/2012 20:47:51

Pour finir, j'ai intégré les modifs pour VS2010 au point où ça compile sans warning ni erreur (et où un test de requête basique fonctionne), j'ai fait le ménage de printemps dans le code, et j'ai mis le résultat sur github:
https://github.com/manitou-mail/pgstream

#375 Re : C et C++ » Compiler libpqxx sous Windows 7 avec MSVC11 » 12/04/2012 18:24:07

Noxalus a écrit :

J'ai bien tenté de la compiler avec MinGW, mais après avoir exécuté le configure, lorsque j'essaye de lancer un "make", il me dit qu'il n'y a rien à faire pour "all" ni pour "all-am".

Par acquis de conscience j'ai essayé et je n'ai  pas ce problème:
(pré-requis: configure && make && make install de postgresql  avec mingw):
Configuration:

$ cd /c/src/pgstream-1.0
$ ./configure --with-pgsql-includes=/usr/local/pgsql/include --with-pgsql-libs=/usr/local/pgsql/lib/

....la partie finale du résultat...:

checking whether to build static libraries... yes
creating libtool
which: pg_config: unknown command
configure: WARNING: Couldn't find pg_config in PATH.
checking libpq-fe.h usability... yes
checking libpq-fe.h presence... yes
checking for libpq-fe.h... yes
checking for PQexec in -lpq... yes
checking for PQexecParams in -lpq... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: executing depfiles commands

Compilation:

$ make
Making all in src
make[1]: Entering directory `/c/src/pgstream-1.0/src'
source='pgstream.cpp' object='pgstream.lo' libtool=yes \
        depfile='.deps/pgstream.Plo' tmpdepfile='.deps/pgstream.TPlo' \
        depmode=gcc3 /bin/sh ../depcomp \
        /bin/sh ../libtool --mode=compile g++ -DPACKAGE_NAME=\"pgstream\" -DPACK
AGE_TARNAME=\"pgstream\" -DPACKAGE_VERSION=\"1.0\" -DPACKAGE_STRING=\"pgstream\
1.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"pgstream\" -DVERSION=\"1.0\" -DSTDC_H
EADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRIN
G_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1
-DHAVE_UNISTD_H=1 -DHAVE_LIBPQ_FE_H=1  -I. -I.   -I/usr/local/pgsql/include   -
g -O2 -c -o pgstream.lo `test -f 'pgstream.cpp' || echo './'`pgstream.cpp
mkdir .libs
g++ -DPACKAGE_NAME=\"pgstream\" -DPACKAGE_TARNAME=\"pgstream\" -DPACKAGE_VERSION
=\"1.0\" "-DPACKAGE_STRING=\"pgstream 1.0\"" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=
\"pgstream\" -DVERSION=\"1.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_
STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=
1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIBPQ_FE_H=1 -I
. -I. -I/usr/local/pgsql/include -g -O2 -c pgstream.cpp -MT pgstream.lo -MD -MP
-MF .deps/pgstream.TPlo  -DDLL_EXPORT -DPIC -o .libs/pgstream.lo
g++ -DPACKAGE_NAME=\"pgstream\" -DPACKAGE_TARNAME=\"pgstream\" -DPACKAGE_VERSION
=\"1.0\" "-DPACKAGE_STRING=\"pgstream 1.0\"" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=
\"pgstream\" -DVERSION=\"1.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_
STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=
1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_LIBPQ_FE_H=1 -I
. -I. -I/usr/local/pgsql/include -g -O2 -c pgstream.cpp -MT pgstream.lo -MD -MP
-MF .deps/pgstream.TPlo -o pgstream.o >/dev/null 2>&1
mv -f .libs/pgstream.lo pgstream.lo
/bin/sh ../libtool --mode=link g++  -g -O2   -o libpgstream.la -rpath /usr/local
/lib -version-info 1:0:0 pgstream.lo -lpq -L/usr/local/pgsql/lib/
libtool: link: warning: undefined symbols not allowed in i686-pc-mingw32 shared
libraries
rm -fr .libs/libpgstream.la .libs/libpgstream.* .libs/libpgstream.*
ar cru .libs/libpgstream.a  pgstream.o
ranlib .libs/libpgstream.a
creating libpgstream.la
(cd .libs && rm -f libpgstream.la && ln -s ../libpgstream.la libpgstream.la)
make[1]: Leaving directory `/c/src/pgstream-1.0/src'
make[1]: Entering directory `/c/src/pgstream-1.0'
make[1]: Nothing to be done for `all-am'.
make[1]: Leaving directory `/c/src/pgstream-1.0'

Ceci étant, le format .a/.lib pour un simple couple de fichiers (.cpp,.h) n'est pas indispensable.

Pied de page des forums

Propulsé par FluxBB