Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#226 Re : Général » Problème pour créer collation » 23/04/2018 16:46:45
Il faut donc ajouter TEMPLATE=template0 à tout ça.
#227 Re : Général » Problème pour créer collation » 23/04/2018 16:28:55
Il se trouve que la locale French_France.1252 n'est pas limitée à un encodage spécifique. Comme dit dans la doc ici:
https://www.postgresql.org/docs/current … ibyte.html
For C or POSIX locale, any character set is allowed, but for other libc-provided locales there is only one character set that will work correctly.
(On Windows, however, UTF-8 encoding can be used with any locale.) If you have ICU support configured, ICU-provided locales can be used with most but not all server-side encodings.
Si pgAdmin ne propose pas la collation nouvellement créee, le problème est à son niveau.
Un CREATE DATABASE à la main devrait passer.
#228 Re : Général » Problème pour créer collation » 23/04/2018 15:36:46
Windows utilise une convention différente des systèmes Unix pour nommer ses locales, et notamment sur le fait que l'encodage (UTF8) ne fait pas partie du nom.
Essayez plutôt
create collation fr_FR ( LOCALE = 'French_France.1252')
#229 Re : Général » Problème pour créer collation » 23/04/2018 14:28:34
Quel est le système d'exploitation du serveur?
#230 Re : Installation » Erreur (0x0000274D/10061) » 13/04/2018 15:24:37
Par contre, il n'y a visiblement aucun port 5432... Le port indiqué est 53, ce qui ne me convient pas car postgresql (pgadmin) n'accepte que les ports au dessus de 1024...
Le port indiqué par quoi? Pourquoi s'intéresser au port 53, qui est le port du service DNS?
En fait les éléments de la discussion laissent penser que postgres ne se lance pas. Par exemple le résultat de ps:
quand ps aux|grep postgre ne trouve que le processus grep, ça veut dire que postgres ne tourne pas ou au mieux qu'on ne regarde pas au bon endroit. Dans le cas d'une recherche de problème, il ne faut pas faire comme si c'était positif et passer à la suite.
Il faudrait regarder les logs dans /var/log/postgresql ou équivalent suivant la distrib. Si postgres s'arrive pas à se lancer ça doit être écrit dedans avec les messages d'erreur correspondant.
#231 Re : Migration » Migration POSTGRESQL V7.4.19 vers POSTGRESQL V9.2.13 SQL_ASCII » 04/04/2018 15:44:36
A propos de cette erreur
ERREUR: séquence d'octets invalide pour l'encodage « UTF8 » : 0xe9 0x64 0x2e
0xe9 étant le code du E accent aigu en LATIN1, généralement ça indique que les contenus sont plutôt en LATIN1
et pas en UTF-8.
Si le cluster a été initialisé avec initdb --no-locale --encoding=SQL_ASCII comme précisé dans le 3eme message.
il ne devrait pas être possible d'avoir cette erreur, et d'ailleurs pas non plus cette autre erreur:
ERREUR: l'encodage « SQL_ASCII » ne correspond pas à la locale « fr_FR.UTF-8 »
Peut-être que vous mélangez les résultats et les commandes qui viennent de plusieurs tentatives différentes?
#232 Re : Général » Requete pivot » 26/03/2018 15:21:18
Il faut savoir si le besoin est un pivot avec colonnes statiques ou dynamiques.
Si la liste des colonnes est statique, la fonction crosstab() de tablefunc peut faire l'affaire.
Si la liste des colonnes est dynamique (peut changer d'une exécution à l'autre) il faut générer dynamiquement la requête qui va afficher les résultats pivotés. Cette requête peut être un crosstab mais quand on en est à la générer, on peut aussi bien produire une requête indépendante:
SELECT
autres colonnes,...
(CASE WHEN colonne='la valeur1' THEN expression END) AS "la valeur1",
... etc pour toutes les valeurs possibles de la colonnesce résultat étant la structure de base d'un pivot.
#233 Re : PL/pgSQL » Comment afficher un agrégat » 21/03/2018 16:09:34
Il suffit de faire pareil que dans la clause where, c'est-à-dire mettre une sous-requête indépendante du reste:
select ... ,
(SELECT AVG(salaire) FROM employes) as "salaire moyen"
FROM employes
etc...#234 Re : Général » saturation disque postgresql » 09/03/2018 18:09:14
C'est une option de sh. D'après man sh:
-c chaîne Si l'option -c est présente, les commandes sont lues depuis
la chaîne fournie. S'il y a des arguments après la chaîne,
ils sont affectés aux paramètres positionnels, en commençant
par $0.
#235 Re : Général » espace disk saturé , postgresql ne peut démarrer » 08/03/2018 14:37:43
Dans $PGDATA/base il y a un répertoire par base de données, avec l'OID de la base comme nom.
Quand postgres est arrêté, on peut déplacer certains de ces répertoires avec tout leur contenu vers une autre partition, et les remplacer par des liens symboliques. Quand de l'espace disque est à nouveau disponible, on peut copier les données en sens inverse pour ne pas garder le lien symbolique. Je ne sais pas si DROP DATABASE fonctionne avec le lien symbolique en place, jamais essayé.
#236 Re : Installation » Accès à la base de données » 03/03/2018 18:51:00
Les logs de connexion sont dans le même fichier que les autres logs. Les échecs de connexion devraient y être dans tous les cas. Pour voir toutes les connexions, y compris les succès, mettre
log_connections = on
dans le postgresql.conf, redémarrer le serveur, regarder les logs à ce moment là, faire la manip avec dolibarr, et comparer les logs entre juste avant et juste après.
L'erreur mentionnant pg_logdir_ls() vient du logiciel pgAdmin, elle n'a pas de lien direct avec le reste.
Pour moi ce message d'erreur de dolibarr est intéressant
"La connexion ayant échoué, les paramètres du serveur ou du super utilisateur sont peut-être incorrects"
Il dit explicitement qu'il veut se connecter en superutilisateur mais vous ne dites pas que le dolibarrowner que vous avez créé est superutilisateur.
Si la procédure d'install de dolibarr veut être superutilisateur c'est peut-être parce que c'est elle qui est censée créer l'utilisateur et la base. Parce que si ce n'est pas pour ça, ce serait pour quelle autre raison?
#237 Re : Général » saturation disque postgresql » 03/03/2018 18:15:21
Sur ubuntu le fichier de log est créé par défaut à l'extérieur de postgres, log_destination est sur stderr et logging_collector à off, le renouvellement est géré par rotatelog ( cf /etc/logrotate.d/postgresql-common), et si on parle de récupérer l'espace disque à chaud, sans redémarrer le serveur, il faut plutôt tronquer le fichier en faisant ça:
$ sudo sh -c 'echo > /var/log/postgresql/posgresql-X.Y-main.log'(en fait le echo n'est même pas nécessaire, une redirection sans commande marche aussi).
Quand on effaçe le fichier avec un "rm", le système ne va pas libérer l'espace tant que le service postgres
garde ce fichier ouvert, et en fait le fichier et tout son contenu continue d'être accessible à tout processus qui l'a ouvert
*avant son effacement*
#238 Re : ODBC » Compatibilité entre PostgreSQL 9.4.13 et Oracle 11.2.0.1 » 26/02/2018 17:16:51
La partie postgresql du log est ici:
could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 4444?FATAL: password authentication failed for user "MY_USER"
J'ai ajouté des sauts de lignes car ce sont deux erreurs bien distinctes.
La première erreur "Connection refused" vient de la couche réseau. Vraisemblablement le tunnel est en IPv4 seulement mais localhost se résoud en plusieurs adresses: IPv6 (::1) et IPv4 (127.0.0.1) et il commence par essayer l'IPv6 (=>échec) puis l'IPv4 (=>succès au niveau réseau en tout cas).
Une fois que la connexion est établie au niveau réseau vers 127.0.0.1:4444 il parle effectivement à un serveur PostgreSQL en face, qui produit la 2eme erreur:
FATAL: password authentication failed for user "MY_USER"
qui est une erreur classique de login invalide ou mot de passe invalide.
#239 Re : Optimisation » Optimisation d'une requête » 20/02/2018 17:39:53
Intéressant cette différence 54 vs 124 parce que le plan https://explain.depesz.com/s/tZFG sort pourtant 54 lignes au niveau le plus haut:
Seq Scan on curve abscurve0_ (cost=0.00..344652122.45 rows=299 width=201) (actual time=46354.070..46991.799 rows=54 loops=1)
Si le résultat a 124 lignes, je ne vois pas pourquoi ça ne se voit pas dans le explain analyze, mais quelque chose doit m'échapper.
Indépendamment de ça s'il y a des doublons de calculationDate pour un même rawCurveId le DISTINCT ON devrait les écarter (en garder un seul) alors que la sous-requête va garder les deux. Donc ce n'est pas rigoureusement équivalent.
Ce qui est ennuyeux dans le plan d'exécution montré, c'est qu'il lance la sous-requête 60742 fois.
Si le DISTINCT ON ne fait pas l'affaire, un vrai JOIN marcherait peut-être mieux, avec une sous-requête qui sortirait max(date) par id, du style:
(SELECT FROM table ) AS t1 JOIN
(select rawcurveid, max(calculationDate) as maxdate FROM table GROUP BY rawcurveid) sub
ON (sub.rawcurveid=t1.rawcurvid AND sub.maxdate=t1.calculationDate)#240 Re : Optimisation » Optimisation d'une requête » 20/02/2018 16:50:48
Pour le DISTINCT ON, non ma remarque n'est pas pour la sous-requête mais pour la requête dans son intégralité.
C'est-à-dire que vu génériquement au lieu de faire:
SELECT colonnes FROM table t1 where date=(select max(date) from table t2 where t1.id = t2.id) ;DISTINCT ON permet d'écrire
SELECT distinct on (id) colonnes FROM table ORDER BY id, date DESC;qui traduit la même idée de manière plus directe, c'est-à-dire pour chaque id, ne garder que la date la plus récente.
cf https://docs.postgresql.fr/10/sql-select.html section "DISTINCT Clause"
#241 Re : Optimisation » Optimisation d'une requête » 20/02/2018 15:06:27
C'est une auto-jointure qui est exprimée via une sous-requête. Apparemment il s'agit de filtrer sur la date la plus récente de la même série de mesure ou quelque chose de ce style. Avec Postgres, il est souvent plus efficace de faire ça avec un DISTINCT ON (id en question)+ tri par date descendante.
A part ça, il y a un index sur rawCurveId? S'il y en a un, apparemment le moteur préfère celui sur la date.
#242 Re : Général » [SQL] Question algo de requête » 19/02/2018 18:02:09
On pourrait expliquer pourquoi c'est lent en regardant le EXPLAIN ANALYZE de la requête.
#243 Re : Général » [SQL] Question algo de requête » 15/02/2018 17:33:45
je pense que vous voulez un UPDATE corrélé qui ressemblerait à ça:
UPDATE facture SET commande_id = (select max(id) from commande
where commande.client = facture.client
and commande.date <= facture.date)#244 Re : Général » [résolu] postgres_fdw et droits de l'utilisateur local » 11/02/2018 19:12:41
Pour moi le CREATE USER MAPPING ne donne pas de droit implicite sur les tables distantes créées plus tard. Les droits sur les tables distantes sont gérées exactement comme pour tables locales: le possesseur a tous les droits et les autres doivent acquérir via un GRANT, plus ou moins direct.
Sur la question de l'utilisateur admin, dans postgres, je comprends ça comme admin=SUPERUSER. postgres n'est pas un utilisateur spécial en-dehors d'être SUPERUSER et tout utilisateur SUPERUSER peut faire la même chose que lui. Pour un SUPERUSER, grosso-modo tous les tests de droits d'accès sont court-circuités. Il pourra toujours faire n'importe quoi sur n'importe quelle table.
#245 Re : Général » [résolu] postgres_fdw et droits de l'utilisateur local » 11/02/2018 18:12:06
Quelle est la requête sql qui provoque cette erreur?
Qui est le possesseur de la table (c.a.d qui a exécuté le CREATE FOREIGN TABLE) ?
Est-ce le même utilisateur que celui qui lance cette requête ou un autre?
Un utilisateur lambda n'a pas le droit par défaut de sélectionner une table qui ne lui appartient pas, qu'elle soit locale ou distante.
#246 Re : Général » Sélection aléatoire dans liste de varchar » 08/02/2018 16:54:23
Le problème est de corréler la valeur aléatoire et la date, de façon à ce que le moteur ne sorte pas une seule valeur pour toutes les dates, alors qu'il n'y a aucune corrélation "naturelle". Il y a sûrement plein de méthodes, en voici une qui me vient avec LATERAL:
select d.x,r.a
from generate_series(timestamp '2018-01-01', '2018-02-08', '1 day') as d(x)
join lateral (VALUES ('toto'),('titi'),('tata') ORDER BY random(),d.x limit 1) as r(a)
on true;Le fait d'ajouter d.x dans la clause de tri introduit une dépendance artificielle entre la 1ere et la 2nde colonne qui force postgres à recalculer la 2nde colonne à chaque ligne.
Le JOIN LATERAL est une nouveauté de la 9.3 qui justement permet d'exprimer qu'un résultat à gauche du JOIN doit être réinjecté à droite.
#247 Re : Général » Sélection aléatoire dans liste de varchar » 08/02/2018 14:53:24
VALUES ('toto'),('titi'),('tata') ORDER BY random() LIMIT 1;Bien qu'il n'y ait pas de SELECT, c'est une requête valide qui renvoie une ligne.
Elle peut aussi être utilisée en sous-requête dans un UPDATE:
UPDATE matable SET macolonne = (VALUES ('toto'),('titi'),('tata') ORDER BY random() LIMIT 1);#248 Re : Général » tuer un processus du maintenance qui perturbe la production » 08/02/2018 12:25:49
Il faut aussi se demander si c'est utile de faire un vacuumdb scripté en cron.
Ce type de script était utile et recommandé avant qu'autovacuum soit intégré, vers la version 8.0 ou 8.1, il y a plus de quinze ans, mais c'est censé être obsolète depuis.
Si vous n'avez pas une raison précise de faire ça, essayez de le supprimer. Et autovacuum peut être paramétré pour le rendre plus ou moins agressif si nécessaire.
#249 Re : Général » Calculer une médiane pondérée » 01/02/2018 16:19:30
d'après ce que j'ai pu comprendre et vérifier par le calcul, R recherche les "limites" encadrantes et calcule la moyenne pondérée de ces limites
Si l'on en croit l'explication de wikipedia, on doit faire ça quand on tombe dans le "Special Case", pas dans le "General Case".
"Consider a set of elements in which two of the elements satisfy the general case. This occurs when both element's respective weights border the midpoint of the set of weights without encapsulating it; Rather, each element defines a partition equal to 1 / 2 . These elements are referred to as the lower weighted median and upper weighted median"
Je n'ai pas fait le calcul avec les données d'exemple pour savoir dans quel cas on était, mais la requête que j'ai proposé étant centrée sur le "SELECT x FROM runsums", il me paraît clair qu'elle ne gère que le "General Case".
#250 Re : Général » Calculer une médiane pondérée » 30/01/2018 10:33:09
Avec un nombre de valeurs impaires, je m'attendrais à ce que la médiane soit exactement un élément de la liste.
10.94 doit correspondre à 10.938 avec un arrondi à 2 décimales, mais 10.87 correspondrait à quoi?