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

#251 Re : Général » Calculer une médiane pondérée » 29/01/2018 21:49:14

C'est une requête compliquée mais a priori faisable directement avec les sommes cumulatives en fenêtrage.

Une requête MS-SQL qui a l'air de bien correspondre à la définition de wikipedia, est proposée ici sur un forum MS (c'est la réponse validée):

https://social.msdn.microsoft.com/Forum … ransactsql


WITH runsums AS (
   SELECT  x,             SUM(y) OVER (ORDER BY x ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS runsum,
           SUM(y) OVER (ORDER BY x ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS prevsum,
           SUM(y) OVER ()  AS total
   FROM    Age
)
SELECT x
FROM   runsums
WHERE  total / 2 BETWEEN prevsum AND runsum

Elle est portable telle quelle sur PostgreSQL, il n'y a qu'à changer les noms des colonnes et de la table.

#252 Re : Général » COLLATE insatisfaisant » 12/01/2018 13:54:59

Si vous faites ça il faut aussi réindexer tous les index qui utilisent cette collation dans toutes les bases de cette machine. Car ils sont tous invalides après ça.


Personnellement je suggérerais d'étudier une variante où on crée une nouvelle collation dans Linux sans toucher à l'existant. Suivi d'un CREATE COLLATION dans PostgreSQL.

#253 Re : Général » Question sur l'affectation = ou := » 11/01/2018 20:08:46

Dans la partie declare des fonctions, il faut := pour assigner une valeur.

S'il s'agit de plpgsql, d'après la doc (https://docs.postgresql.fr/10/plpgsql-declarations.html),
= et := se valent y compris dans une section DECLARE, puisque la syntaxe de cette section
est donnée comme:

nom [ CONSTANT ] type [ COLLATE nom_collationnement ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];

et le texte dit explicitement:

Le signe d'égalité (=) peut être utilisé à la place de :=, qui lui est conforme au PL/SQL.

#254 Re : Optimisation » épuration pg_largeobject » 08/01/2018 21:36:33

d'un vacuumlo et un full vacuum ( plus de 40 heures), la base est passé de 1,3 Go à 300 Go

Je suppose que vous vouliez dire de 1,3 To à 300 Go.

Quoiqu'il en soit effectivement les options pour dégonfler pg_largeobject sont limitées.
Par exemple il y a eu cette question  sur  la liste -general en anglais, sans alternative trouvée au VACUUM FULL.



Admettons que vacuumlo ait fait son travail, c.a.d appeler lo_unlink() avec tous les OIDs non référencés.
Pour se faire une idée, quel est après ça l'état des lieux en termes de :


- combien d'objets restent:  SELECT count(*) FROM pg_largeobject_metadata

- quelle taille utile ils font:  SELECT sum(octet_length(data)) FROM pg_largeobject

- quelle taille disque fait la table: SELECT pg_relation_size('pg_largeobject');

- quelle taille pour la table+son index: SELECT pg_total_relation_size('pg_largeobject')


Sinon pg_largeobject possède bien une clef primaire sur la valeur composite (loid, pageno), mais peut-être que ça ne convient
pas à pg_repack?

\d+ pg_largeobject
                  Table "pg_catalog.pg_largeobject"
 Column |  Type   | Modifiers | Storage  | Stats target | Description 
--------+---------+-----------+----------+--------------+-------------
 loid   | oid     | not null  | plain    |              | 
 pageno | integer | not null  | plain    |              | 
 data   | bytea   | not null  | extended |              | 
Indexes:
    "pg_largeobject_loid_pn_index" UNIQUE, btree (loid, pageno)

#255 Re : PSQL » Passer sous silence les NOTICE » 19/12/2017 21:14:22

Pour les enlever:

  SET client_min_messages TO warning;

Pour les remettre:

  SET client_min_messages TO default;

#256 Re : Général » connexion perdue en créant une extension postgis » 19/12/2017 21:12:08

C'est peut-être une incompatibilité de version ou d'options de compilation entre ce postgres et ce postgis.

Quelles sont les versions des deux et de quelles sources viennent-ils? Compilation perso? Packages? Quelle(s) source(s) de packages?

Ce qu'on peut dire sur le log ci-dessus est que "signal 6: Aborted" est dû au programme lui-même qui appelle abort(). Que ce soit postgresql ou postgis qui le fait, difficile à dire. On peut aller plus loin avec un fichier core et/ou une trace:

https://wiki.postgresql.org/wiki/Genera … QL_backend

#257 Re : Général » Récupération de données après plantage » 19/12/2017 17:45:10

Un backup à froid, c'est de faire une copie des fichiers alors que postgres est arrêté. Par opposition à un backup à chaud, où il tourne pendant ce temps là.

Quand on parle du remplacement du répertoire main/, on est dans un contexte de restauration, pas de backup.

Je n'utilise pas docker personnellement, donc le "conteneur ne répond pas" ne me parle pas tellement.

Dans les scripts docker il doit y avoir un moment où il appelle pg_ctl pour démarrer postgres, et c'est là qu'il faut regarder les erreurs que ça produit.

#258 Re : Général » Récupération de données après plantage » 19/12/2017 15:14:45

Ce chemin /etc/postgresql/9.5/main ressemble à un répertoire contenant des fichiers configurations dans une structure à la Debian, et pas des données.

Les données seraient plutôt dans /var/lib/postgresql/9.5/main

Côté procédure, le remplacement pur et simple de PGDATA par un backup à froid ou un snapshot cohérent fonctionne généralement, si le serveur est identique à celui en fonction lors du backup.

#259 Re : Général » Récupérer le contenu d'un champ de type oid si possible coté client » 06/12/2017 16:45:37

shishi a écrit :

L'idéal serait que mon application Access lance une commande qui récupérait le fichier contenu dans la base N°1 sur l'espace réseau partagé

Le plus simple dans ce cas est que la commande soit psql.

psql [options de connexion] -c '\lo_export oid chemin-de-fichier'

permet de récupérer l'objet large correspondant à l'oid en 1er paramètre dans le fichier en 2eme paramètre.


Sinon il doit y avoir des solutions à travers ODBC mais la difficulté est de savoir à quel type sous Access peut être associé l'objet large. Sur les versions modernes de PG, on peut appliquer la fonction lo_get() pour avoir tout le contenu d'un objet large en un seul champ BYTEA. Il reste quand même à voir comment lire le BYTEA via ODBC mais ça doit se trouver dans la doc du driver ODBC.

#260 Re : Installation » Réutiliser un tablespace existant après réinstallation de PostgreSQL » 06/12/2017 16:15:54

Si on parle de CREATE TABLESPACE, non ce n'est pas possible parce que la liste et les structures des tables sont dans d'autres tables (du schéma pg_catalog) et il n'y  a pas d'auto-découverte possible des tables et autres objets dans un tablespace pris isolément.

Par ailleurs, quand l'instance d'avant a été arrêtée, les données dans ce tablespace en étaient à un certain avancement de transaction   qui est lié à cette instance et ne correspond plus à rien dans la nouvelle instance.

En clair un tablespace pris isolément est inutilisable, autant que des fichiers de données qu'on aurait pris directement de $PGDATA.

#261 Re : Migration » Grant to @localhost (résolu) » 24/11/2017 18:42:25

Le GRANT mysql a cet effet implicite, oui.
C'est une spécificité de mysql de faire un combo avec [attribution de droits d'accès + création simultanée d'utilisateur] liés à l'endroit d'où il se connecte (ici localhost). Dans les autres SGBDs ces deux notions sont généralement bien séparées.

#262 Re : Migration » Grant to @localhost (résolu) » 24/11/2017 15:13:22

GRANT ALL ON icingaweb2.* TO icingaweb2@localhost IDENTIFIED BY 'CHANGEME';

Cette ligne suppose qu'il y a une base existante appelée icingaweb2.
Admettons que cette base appartienne à un utilisateur icinga et que les objets contenus appartiennent aussi à un utilisateur icinga.
Cet utilisateur aura été créé par CREATE USER.

Si le web est configuré pour se connecter avec l'utilisateur icinga à cette base via localhost et avec le mot de passe choisi à la création de l'utilisateur, le GRANT ci-dessus n'a pas besoin d'équivalent, parce que:

- l'utilisateur existe déjà
- il a déjà tous les droits sur tous les objets de sa propre base.
- un pg_hba.conf normal donne déjà le droit de se connecter avec un mot de passe via localhost.

#263 Re : Site PostgreSQL.fr » Fonction de controle de date valide » 15/11/2017 18:25:49

C'est un problème connu, je crois que ça ne sera jamais corrigé dans cette fonction pour  rester "bug-compatible" parce qu'elle fait ça depuis toujours.

Dans le code ci-dessus il devrait suffire de faire:

RETURN to_char(V_Dat, 'YYYYMMDD') = P_VAR;

à la place de RETURN TRUE:

#264 Re : Sécurité » role Membre de » 02/11/2017 15:02:06

GRANT lecture_production, report_production to "Production3";

#265 Re : Général » Compter les connexions » 30/10/2017 15:08:37

Quand on est superutilisateur on voit le contenu de "state" pour tout le monde, alors que quand on ne l'est pas, on ne voit une valeur non-vide que pour les sessions de son propre compte.


A mon avis manuellement vous n'êtes pas connecté avec le même compte que celui qui appelle cette fonction et qui voit "state" à NULL pour les sessions des autres.

#266 Re : Installation » Problème ajout serveur sous PostgreSQL 10 (avec pgAdmin4) » 20/10/2017 11:39:19

L'erreur portant sur IPv6 indique que c'est bien une connection IPv6 faite par le client. Mais ce n'est pas très surprenant, pour beaucoup de systèmes maintenant localhost est alias de 127.0.0.1 et aussi de ::1. Le plus simple est d'utiliser explicitement 127.0.0.1 pour forcer IPv4 si nécessaire.


Pour le mot de passe, je m'attendrais à ce que soit le même que celui demandé à l'installation de PostgreSQL.


Reste que pgAdmin ne sait apparemment pas se débrouiller avec un message d'erreur non utf-8 au moment de l'établissement de la connexion, ça a l'air d'être un bug qui mériterait de leur être signalé s'il n'est pas déjà enregistré dans leur outil:
https://redmine.postgresql.org/projects/pgadmin4

#267 Re : Installation » Problème ajout serveur sous PostgreSQL 10 (avec pgAdmin4) » 19/10/2017 21:11:31

C'est intéressant qu'il y ait une erreur avec un é (sur "échouée") en 1er caractère hors ASCII parce que ça correspond bien à l'idée que c'est le message d'erreur que pgAdmin n'arrive pas à gérer  (en plus d'être écrit dans le log il est envoyé à pgAdmin qui en théorie devrait l'afficher s'il y arrivait).


Le message d'erreur est en français mais pourtant ne devrait plus l'être  si lc_messages était positionné à C.
Vous êtes sûr d'avoir redémarré le service PostgreSQL après la modification?


Dans un second temps, il y a le problème que d'après cette erreur, un mauvais mot de passe est entrée dans pgAdmin pour l'utilisateur postgres. Pour éviter ça, vous pouvez éditer le fichier pg_hba.conf et mettre "trust" à la place de "md5", comme ça il ignorera le mot de passe. Il faut aussi recharger le service PostgreSQL, je ne sais plus comment on fait sous Windows, au pire un arrêt-relance.

#268 Re : Installation » Problème ajout serveur sous PostgreSQL 10 (avec pgAdmin4) » 19/10/2017 12:46:34

pgAdmin et le serveur PostgreSQL sont deux logiciels séparés qui communiquent par réseau. Même s'ils sont installés sur la même machine.

Quand on "crée un serveur" sous pgAdmin, on indique où se trouve PostgreSQL et comment le joindre, et aussitôt il chercher à s'y connecter, et c'est là apparemment que l'erreur survient.

Biensûr tout le monde n'a pas cette erreur sinon les développeurs n'auraient même pas diffusé pgAdmin dans cet état, il y a une variabilité lié à l'environnement là-dessous. Vu que l'erreur concerne l'encodage d'un E accentué, ça oriente clairement vers une histoire d'environnement francophone versus anglophone.


PostgreSQL a un fichier de configuration qui s'appelle postgresql.conf et je suggère d'aller vérifier et changer le paramètre lc_messages dans ce fichier.

Par ailleurs il a des fichiers de log qui consignent les erreurs qui surviennent et je suggère aussi de regarder s'ils mentionnent qq chose au moment de l'erreur.

L'emplacement des logs est spécifié dans postgresql.conf, ça peut atterrir aussi dans le journal de windows lisible avec l'observateur d'évènement de windows.

#269 Re : Installation » Problème ajout serveur sous PostgreSQL 10 (avec pgAdmin4) » 18/10/2017 19:25:09

Il faudrait vérifier les messages d'erreur côté serveur. De toute façon, c'est toujours la  chose à faire quand quelque chose dysfonctionne et qu'on n'a pas d'idée sur la raison.

Sinon une chose à essayer serait
  lc_messages = 'C'
dans la configuration serveur. L'idée est que le caractère "é" encodé en iso-latin pourrait faire partie d'un message d'erreur encodé comme ça, justement parce que lc_messages indiquerait de faire ça, alors que pgAdmin4 les attendrait en utf-8.

En mettant 'C' ,  les versions  non traduites des messages (donc compatibles utf-8)  seront produites.

#270 Re : Installation » Installation extension PLJAVA dans POSTGRESQL9.4 » 29/09/2017 13:32:14

Je n'ai pas d'expérience personnelle là dessus mais ceux qui ont eu le même message d'erreur ont l'air de dire que:

- il faut que java soit dans le $PATH

- il faut que pljava.so (et peut-être pljava.jar s'il y en a un) soit dans le répertoire $libdir de postgresql, au même endroit que les autres extensions (trouvable par la commande shell "pg_config --pkglibdir" si nécessaire)

#271 Re : Général » [9.5] Gestion des utilisateurs d'une base de données » 28/09/2017 19:03:15

Je ne comprends pas ce qui gêne précisément, mais à toutes fins utiles, voici une piste: un superutilisateur pourrait fournir une fonction en mode SECURITY DEFINER qui ferait le ALTER ... OWNER transférant la possession de l'objet à celui qui possède la base.


Exemple pour les tables, à exécuter par un superutilisateur,donc:

CREATE FUNCTION depossession_table(objname regclass) returns void AS $$
BEGIN
 execute format('ALTER TABLE %I OWNER TO owner_de_la_base', objname);
END
$$ SECURITY DEFINER language plpgsql;

Ensuite n'importe quel utilisateur créant une table pourrait faire immédiatement:

 SELECT depossession_table('nom_de_table');

Il est possible de faire une version plus élaborée de cette fonction qui gère les autres types d'objets, ou qui irait chercher le possesseur de la base dynamiquement, etc.

Il est aussi possible d'accorder un GRANT EXECUTE de cette fonction uniquement à certains rôles (dans ce cas commencer par REVOKE EXECUTE... FROM public, par défaut les fonctions étant exécutables par PUBLIC).

#272 Re : Installation » Installation extension PLJAVA dans POSTGRESQL9.4 » 28/09/2017 16:28:07

LD_LIBRARY_PATH est une liste de répertoires, pas une liste de fichiers.

Si libjvm.so est dans
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64/jre/lib/amd64/server
c'est cette valeur qu'il faut mettre dans LD_LIBRARY_PATH

Si ça ne fonctionne toujours pas, vérifier aussi que cette variable est bien dans l'environnement du serveur postgres quand il démarre.

#273 Re : Général » [9.5] Gestion des utilisateurs d'une base de données » 28/09/2017 16:21:15

adrien1 a écrit :

Ce qui implique que si "u1" exécute  'set role monprojet_admin' puis  'set role monprojet_owner', "u1" aura les droits full sur la db.

Avoir tous les droits sur une base (GRANT ALL... ON DATABASE..) ça veut dire:
- CREATE: le droit de créer un schéma
- CONNECT: le droit de se connecter
- TEMPORARY: le droit de créer des tables temporaires

Si u1 est un admin qui peut créer des objets SQL, on suppose qu'il a déjà ces droits.
Concrètement "les droits full sur la db" ça veut dire quoi qu'il n'aurait pas déjà?

Hors, je n'ai pas envie que u1 puisse octroyer des droits à d'autres utilisateur.

Mais la transmission des droits dépend de la clause GRANT OPTION,  non?
Et elle n'est pas mentionnée dans le descriptif de la situation.

#274 Re : pgAdmin4 » Erreur sans objet » 19/09/2017 20:16:17

S'il n'y a pas de trigger, ce n'est donc pas ça.

Mais ce qu'il faut comprendre par rapport à l'erreur qui mentionne "LINE 3" c'est que cette ligne 3 ne se réfère par à une ligne de la table, mais à la ligne d'un code SQL qui est appelé plus ou moins directement par la mise à jour que vous faites via l'interface PgAdmin4.

Pour y voir plus clair, il serait utile d'examiner ce code SQL quand l'erreur se produit. Par défaut le paramètre log_statement dit au serveur d'écrire dans son log les requêtes en erreur, donc il y a de bonnes chances que l'information soit dans le log du serveur.

#275 Re : pgAdmin4 » Erreur sans objet » 19/09/2017 18:18:31

databaser a écrit :

Comment peut-il y avoir une erreur à la ligne 3 ? Et quelle cellule (il y en a une 15aine de colonnes)

L'impossibilité d'enregistrement ne se fait pas tout le temps. Parfois, ça enregistre sans souci, et parfois ça met cette erreur...

Il y a peut-être un trigger sur la table ou la vue sous-jacente, et ce trigger planterait à la ligne 3 sur certains contenus et pas sur d'autres. C'est plausible si le trigger injecte les variables sans les échapper correctement (erreur commune).

Pied de page des forums

Propulsé par FluxBB