Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#201 Re : PL/pgSQL » Syntaxe/sous-requête WHERE dans un CROSSTAB » 06/06/2018 18:38:03
Pour les espaces, ce n'est pas le problème: d'ailleurs maintenant que vous avez une version qui marche, vous pouvez remettre les espaces, vous devriez observer que ça ne change rien. En tout cas pour les espaces qui servent juste à aérer le code biensûr, pas ceux qui ont une valeur sémantique.
Pour la question de doubler les guillemets simples ou apostrophes, comme c'est pénible on peut utiliser à la place la syntaxe dite "guillemet dollar" comme expliqué dans la doc ici: https://docs.postgresql.fr/10/sql-syntax.html
Cette syntaxe est très souvent utilisée pour encadrer blocs de code dans les CREATE FUNCTION, mais elle peut être utilisée pour toute chaîne de caractères.
Pour l'utilité de la deuxième requête c'est plus compliqué. L'algo utilisé par la fonction crosstab(text), c.a.d la fonction qui prend une seule requête en paramètre, n'est pas le même que celui de la fonction qui prend deux requêtes: crosstab(text, text) En particulier, la première version est incapable de produire des "cases vides" dans le résultat s'il se trouve que certains couples (nomzone,annee) sont absents. Dans ce cas la grille de résultats a des valeurs décalées et apparait fausse.
Ne pas oublier ces 2 remarques importantes de la doc de crosstab(text):
1. "Les noms des colonnes en sortie n'ont pas d'importance en soi"
2. "Notez que crosstab ne fait pas attention à la deuxième colonne du résultat de la requête"
En général on déconseille d'utiliser la 1ere version crosstab(text), trop dangereuse quand on n'est pas bien familier avec son fonctionnement.
Indépendamment de ça l'erreur "return and sql tuple descriptions are incompatible" paraît logique puisque SUM(ST_AREA(geom) doit être de type float (je pense?) alors que les colonnes 2006, 2007 etc.. sont déclarées "varchar".
#202 Re : Général » fichier PGADMIN4_USE_WEBKIT » 30/05/2018 14:22:54
Vous avez dû copier-coller cette ligne d'un blog ou d'une doc qui remplace les guillemets "simples" par des guillemets typographiques pour faire joli.
Mais ce remplacement transforme la syntaxe et rend la commande inutilisable.
Il faut remplacer ces guillemets parasites par des guillemets ASCII, sous la touche 3 en clavier français,
comme ici:
/usr/lib64/qt5/bin/qmake "DEFINES += PGADMIN4_USE_WEBKIT"
#203 Re : Général » Numeric to date » 28/05/2018 17:38:47
Pour le ALTER COLUMN vous pouvez metttre USING NULL s'il n'y avait pas de contenu avant ou s'il est intraduisible dans le nouveau type.
#204 Re : Général » COPY de CSV » 22/05/2018 17:10:07
En CSV c'est pas \N le null par défaut, c'est chaine vide.
Mais vide ça ne veut pas dire une suite d'espaces, ça veut dire zéro caractère.
Ce qu'il faut faire à ce fichier CSV c'est l'élimination des espaces à droite de chaque ligne.
#205 Re : Général » Current schema Null » 19/05/2018 19:15:56
Le problème c'est que le search_path pointe sur un schéma qui n'existe pas du fait d'un pb de syntaxe.
Il a été positionné avec une commande du style:
SET search_path TO "edbuser,edbstore";
alors qu'il aurait dû être mis comme ça:
SET search_path TO edbuser, edbstore;
ou comme ça (avec guillemets même s'ils ne servent à rien ici puisque tout est en minuscules et acvec des caractères de base)
SET search_path TO "edbuser" , "edbstore";
#206 Re : Optimisation » requête lente via fdw » 15/05/2018 20:01:46
Elle n'est pas immutable sans doute parce que le résultat dépend du paramètre pg_trgm.similarity_threshold.
#207 Re : PL/pgSQL » INSERT INTO à partir d'un SELECT » 15/05/2018 13:33:43
Si je comprends l'objectif, l'opération que vous voulez faire est un UPDATE, pas un INSERT.
Un INSERT c'est uniquement pour insérer une nouvelle ligne, donc un nouveau département si on parle
d'une table où il y a une ligne par département.
Ici après avoir ajouté une colonne nomregion par ALTER TABLE, il s'agirait plutôt de mettre à jour le contenu
de cette colonne pour chaque département pré-existant.
La requête doit être du style:
UPDATE departements SET nomregion =
(SELECT regions.nomregions
FROM regions
WHERE ST_CONTAINS(regions.geom, departements.geom)
);Le SELECT entre parenthèses est une sous-requête corrélée, c'est-à-dire que pour chaque ligne de departements, le moteur va l'exécuter avec la valeur de departements.geom correspondant à cette ligne-là, et va mettre à jour le nomregion de cette ligne-là avec le résultat correspondant.
#208 Re : Général » longueur des variables » 15/05/2018 11:56:28
Char(N) est défini par le standard SQL comme un type de base depuis les débuts du SQL, au moins SQL-89, de même que Varchar(N).
Ne serait-qu'à cause de ça, il n'est pas question de l'enlever.
A ma connaissance ces deux types existent sur les autres SGBDs en général et ont grosso-modo le même comportement.
#209 Re : Optimisation » Problème de mémoire sur pg_dump » 15/05/2018 11:38:45
C'est complètement normal, linux garde les blocs en cache, déjà parce qu'ils ne sont pas encore nécessairement écrits physiquement sur le disque, et parce que de toute façon la mémoire qui ne sert à rien d'autre a tendance à être utilisée en cache.
Si vous voulez vider le cache, faire en tant que root:
sync && echo 3 > /proc/sys/vm/drop_caches#210 Re : Optimisation » Problème de mémoire sur pg_dump » 14/05/2018 18:24:50
Quel système d'exploitation? Comment est mesurée la mémoire "consommée" ?
#211 Re : Général » longueur des variables » 14/05/2018 15:49:39
Ce n'est pas la peine de mettre une contrainte via CHECK pour la longueur car un champ typé VARCHAR(5) par exemple a déjà une contrainte sur le non-dépassement de 5 caractères.
Sinon oui c'est judicieux de remplacer CHAR(n) par VARCHAR(n). CHAR(n) complète avec des blancs à droite qui prennent de la place et n'ont aucun intérêt.
#212 Re : Général » Affichage et GRANT » 11/05/2018 16:51:09
LC_MESSAGES ne fonctionne visiblement pas sous Windows, il y a un patch en cours à ce sujet:
https://commitfest.postgresql.org/18/1518/
Est-ce que modifier le paramètre lc_messages de postgresql.conf fonctionne et si oui, pourquoi ne pas faire ça?
#213 Re : Général » longueur des variables » 11/05/2018 13:09:20
Ses : min(octet_length) = 10 et max(octet_length)=12. Pourquoi cette différence entre le max et le min ? A priori, tous les codes ont longueur de 9.
Ce résultat, s'il est obtenu sur une colonne déclarée CHAR(10), prouve à 100% que vous avez des caractères qui ne sont ni des blancs ni des chiffres qui ont atterri dans le champ.
Pour voir exactement ce que sont ces caractères y compris s'ils sont invisibles à l'écran,
vous pouvez exécuter ce genre de requête qui extrait les caractères un par un avec leur code numérique:
select r,ascii(r) from
(select regexp_split_to_table(code, '') as r from BD.TABLE where octet_length(code)=12) s;#214 Re : Général » longueur des variables » 10/05/2018 13:13:08
Je fais cela pour stocker moins (je me dis que si on mets longueur 255, cela prend de la place).
Avec le type varchar(N), la place n'est pas réservée à l'avance dans le stockage, et ça ne fait pas gagner de place
de mettre un N le plus petit possible.
Avec le type char(N) elle est réservée à l'avance mais surtout la chaîne est complétée par des espaces à droite avec un comportement bien particulier dans les comparaisons, voir la doc
https://docs.postgresql.fr/10/datatype-character.html
Ca n'est que dans le cas de char(N) que ça peut être intéressant de réduire le N.
Il faut savoir aussi que l'unité de cette quantité N est le caractère, pas l'octet.
#215 Re : Installation » PG 10 sur Debian 9.4 ? » 30/04/2018 12:34:50
C'est faisable et courant mais pour ça il faut utiliser le dépôt pgdg comme expliqué ici:
#216 Re : Site PostgreSQL.fr » Pusieurs occurences de fonctions présentes. » 27/04/2018 15:09:58
Il faudrait savoir si c'est reproductible et avec quelle version de PostgreSQL?
#217 Re : Site PostgreSQL.fr » Pusieurs occurences de fonctions présentes. » 26/04/2018 18:34:02
Est-ce que ça ne revient pas à demander si Postgres est capable de gérer sa fonctionnalité de "surcharge" dans tous les cas? La réponse est oui, sinon on serait bien embêtés.
Il est vrai que si on prend tout en compte: cast implicites de types en d'autres types, arguments "variadiques", valeurs par défaut, ordre de priorités du search_path, arguments IN et OUT, l'algorithme qui doit trouver la bonne fonction est complexe, mais à ma connaissance il est totalement déterministe.
#218 Re : Site PostgreSQL.fr » Pusieurs occurences de fonctions présentes. » 26/04/2018 16:57:59
Mais maintenant il ne doit plus y avoir de doublons, en considérant le couple (proname,parg).
Sur le schéma pg_catalog, voici ce que ça me sort (juste la fin) en mettant le RAISE NOTICE qui va bien
...
NOTICE: Nom de la fonction (xmlconcat2), (xml, xml)
NOTICE: Nom de la fonction (xmlexists), (text, xml)
NOTICE: Nom de la fonction (xmlvalidate), (xml, text)
NOTICE: Nom de la fonction (xpath), (text, xml, text[])
NOTICE: Nom de la fonction (xpath), (text, xml)
NOTICE: Nom de la fonction (xpath_exists), (text, xml, text[])
NOTICE: Nom de la fonction (xpath_exists), (text, xml)
DO
On voit bien par exemple que xpath() a deux définitions, mais avec des arguments différents.
#219 Re : Site PostgreSQL.fr » Pusieurs occurences de fonctions présentes. » 26/04/2018 16:21:32
Ce bloc fait une erreur pour moi:
ERROR: record "r" has no field "oid"
CONTEXT: SQL statement "Select pg_get_function_arguments (f.oid) from pg_proc f where f.oid = r.oid"
PL/pgSQL function inline_code_block line 23 at SQL statement
ce qui est logique puisque r est alimenté par
FOR r IN SELECT p.proname, p.proowner, p.pronamespace
FROM pg_proc p
et qu'il n'y a pas d'oid derrière ce SELECT, il faut justement l'ajouter.
#220 Re : Site PostgreSQL.fr » Pusieurs occurences de fonctions présentes. » 26/04/2018 14:07:26
Effectivement il n'est pas possible d'avoir dans le même schéma deux fonctions de même nom et mêmes arguments.
Il y a d'ailleurs un index unique dans pg_proc qui l'empêche:
"pg_proc_proname_args_nsp_index" UNIQUE, btree (proname, proargtypes, pronamespace)
Si je comprends bien la question, le code montré sort ces RAISE NOTICE avec des doublons,
mais c'est parce qu'il y a une erreur logique dans
Select pg_get_function_arguments (f.oid) into parg from pg_proc f where f.proname=r.proname;
ce SELECT renvoie plusieurs résultats par r.proname.
Ce qu'il faudrait faire c'est
...
FOR r IN SELECT p.oid, p.proname, p.proowner, p.pronamespace
...
Select pg_get_function_arguments (f.oid) into parg from pg_proc f where f.oid = r.oid;
puisque la clef primaire de pg_proc est pg_proc.oid, pas proname.
Pour ce qui est de \ef il faut préciser les types des arguments,par exemple \ef mafonction(text,int)
#221 Re : Général » json et clés dupliquées » 26/04/2018 09:54:39
select '{"a":1, "b":2, "a":3}'::jsonb;
jsonb
------------------
{"a": 3, "b": 2}Avec le type jsonb, la valeur 1 pour la clef "a" est éliminée par la seconde valeur 3 pour la même clef.
Par opposition, voilà ce que ça donne avec le type json où toutes les valeurs sont conservées:
select '{"a":1, "b":2, "a":3}'::json;
json
-----------------------
{"a":1, "b":2, "a":3}
(1 row)#222 Re : Général » upgrade de postgres 9.3 à 9.6.8 » 25/04/2018 16:50:42
Pour le serveur qui ne démarre il faut regarder les logs.
Si ce n'est pas clair via l'observateur d'évènements windows, peut-être que mettre un vrai fichier de log dans le postgresql.conf peut simplifier. En mettant grosso-modo log_destination à stderr, logging_collector à on et log_directory à pg_log.
Ensuite regarder le contenu de pg_log (dans le répertoire de données, par exemple "C:\Program Files (x86)\PostgreSQL\9.3\data") après un échec de redémarrage.
#223 Re : Général » Erreur 08P01 FATAL » 25/04/2018 16:22:16
Typiquement on a ce genre d'erreur quand une même connexion est multi-utilisée par différents threads ou processus fils d'un même programme client. C'est interdit. Chaque thread doit utiliser sa propre connexion, ou au pire un système d'exclusion mutuelle parfaitement au point pour éviter les conflits.
#224 Re : Général » date vide » 24/04/2018 18:15:03
Avec postgres comme avec les autres moteurs SQL on tend à utiliser NULL quand on n'a pas de valeur. Pas que pour les dates, pour tous les types.
#225 Re : Général » Problème pour créer collation » 23/04/2018 18:25:56
Le forum est là pour ça ![]()
N'oubliez pas de préciser les versions de vos logiciels avec les questions.