Vous n'êtes pas identifié(e).
Bonjour
Je ne sais pas si vous avez les même sentiments que moi des messages que le SGBD envoie lors de la violation d'une contrainte (particulièrement d'un CHECK)?
Je développe mes interface surtout en MS ACCESS (à travers ODBC) mais je migre depuis 2 ans vers JAVA. Les messages d'erreurs envoyés par le SGBD ne sont vraiment pas à la portée des utilisateurs. Pour JAVA c'est plus explicite mais vraiment pour le spécialiste en BD.
J'ai l'idée de placer une description pour les contraintes et d'utiliser les vues systèmes pour renvoyer ces descriptions à travers la contrainte extraite du message.
Par exemple cette vue...
SELECT tc.conname, pg_catalog.pg_get_constraintdef(tc.oid, true), td.description
FROM pg_constraint as tc
INNER JOIN pg_class as tt on tc.conrelid=tt.oid
INNER JOIN pg_namespace as ns on tt.relnamespace=ns.oid
INNER JOIN pg_authid as tu on ns.nspowner=tu.oid AND tu.rolname='nom_role'
LEFT JOIN pg_description as td on tc.oid=td.objoid
Peut être que vous avez des retours d'expériences.
Mais..., je me dis "Qui sont ceux qui soutiennent qu'il faut associer un message d'erreur à un contrainte directement dans le SGBD?"
@+
Merci dverite
J'en ai profité en ajoutant coalesce qui evite un null comme reponse.
@+
Bonjour
Je voudrais mettre en place la péremption dans une table de detail_livraison.
J'ai créé les colonnes "moisperemption" et "anneeperemption".
L'idée est de faire...
1->le mois et l'année sont tous null
2->ou, le mois est compris entre 1 et 12 et l'année est comprise entre 23 et 99.
J'ai alors créé une contrainte check de la sorte...
ADD CONSTRAINT ckperemption CHECK (
(moisperemption IS NULL AND anneeperemption IS NULL)
OR (moisperemption>0 and moisperemption<13
and anneeperemption>22 and anneeperemption<=99)
),
mais PostgreSQL me donne...
ADD CONSTRAINT ckperemption CHECK (moisperemption IS NULL AND anneeperemption IS NULL OR moisperemption > 0 AND moisperemption < 13 AND anneeperemption > 22 AND anneeperemption <= 99);
J'ai tester ce code...
with r as(select 0 as o, 1 as a, 23 as b
union select 1, 0, 3
union select 2, 2, null
union select 3, null, 25
union select 4, 0, null
union select 5, null, 18)
select a, b,
(
(a IS NULL AND b IS NULL)
OR
(a>0 AND a<13 AND b>22 AND b<=99)
),
(a IS NULL AND b IS NULL OR a > 0 AND b < 13 AND a > 22 AND b <= 99)
from r order by o
voici le résultat que je ne comprend vraiment pas.
"a" "b" "?column?" "?column?-2"
1 23 true false
0 3 false false
2 NULL NULL false
NUL 25 NULL false
0 NULL false false
NULL 18 false false
Seule la première ligne doit donner true (ce qui est le cas) mais tout le reste doit donner false.
Qu'est ce j'ai raté?
@+
Merci dverite
J'ai donc fait une lecture incomplète.
@+
Bonjour
N'est ce pas une erreur, dans la documentation (en anglais comme en français), que le suffixe "tz" manque dans la liste des types date/heure? On remarque deux répétitions!
La table système pg_type donne bien les deux!
SELECT typname from pg_type where typname like 'time%'
time
time_stamp
timestamp
timestamptz
timetz
@+
Bonjour
La page d'accueil du site me donne...
Cette page n'existe plus
Vous avez suivi un lien vers une page qui n'existe plus. Vous pouvez afficher la liste des anciennes revisions pour voir quand et pourquoi la page a été supprimée, pour accéder à ses anciennes révisions ou pour la restaurer.
Le problème est-il général? ou c'est uniquement chez moi?
@+
Salut
Le problème peut venir du runtime de VISUAL C++. Il faut faire comparaison (dans la liste des programmes installés) entre les "Microsoft Visual C++ XXX Redistributable". Il se peut que ton dll v3.2 demande un VC runtime différent de celui de v3.1.
En principe se problème est corrigé par l'installeur, mais puisque ce dernier a rencontré des problèmes...
@+
Salut
Que dit le log "C:/Program Files/PostgreSQL/13/data/log"?
Si le fichier "C:/Program Files/PostgreSQL/13/lib/postgis-3.2.dll" existe, il faut voir les droits d'accès pour le compte "service reseau".
@+
Salut
Après copie il faut accorder les droits (sur le dossier) au compte "Service réseau".
@+
Salut et merci des éclaircissements
Pour le "surtout sur windows", je vois énormément de personnes ayant des problèmes d'encodage (à priori à cause de l'encodage natif win1252 de windows, contre utf8 pour le reste du monde)...
Windows est en UNICODE par défaut. Pour les tris et le jeux de caractères c'est la région géographique par défaut mais (pour une colonnes) il est possible de choisir dans ICU (je ne vous apprends rien ).
@+
Salut
Vous pouvez évidemment le faire mais vous risquez des surprises , surtout sur windows.
Pouvez-vous être plus précis. Cela aide vraiment la communauté autour de PostgreSQL.
Certains raccourcis donnent une multitude d’interprétations qui souvent font que certaines solutions sont rejeté juste par "on dit...".
@+
Merci jmarsac
ça marche très bien avec PowerShell
@+
La documentation montre une utilisation sous GNU/Linux. Je ne pense pas que changer la documentation pour utiliser des guillemets doubles plutôt que simple soit une bonne idée, car la norme, à ma connaissance, est :
- guillemet simple : le contenu est utilisé tel quel
- guillemet double : le contenu est "interprété" (variable résolue etc etc)Et donc utiliser par exemple un $ (ou % sur window je crois) avec des guillemets doubles n'aurait pas le comportement attendu.
Le problème ici est que windows fait apparemment l'inverse, ou autre peut être chose. Bref, le problème ne vient pas de pg_dump ni de postgres ni de la documentation mais de windows. Malheureusement, lorsqu'il s'agit d'utilitaires en lignes de commandes les utilisateurs sont censé connaître le fonctionnement de leur shell / OS.
Merci c'est noté
Merci
Votre réponse m'a mis sur le chemin.
Le problème c'est qu'il faut double quotes au lieu de simple. Mais la documentation emplois le simple quote.
-T '*.t*'
@+
Salut
J'utilise la commande suivante...
"chemin\pg_dump.exe" --host localhost --port xxxx --username "monuser" -T '*.t*' --format plain --schema-only --encoding UTF8 --file "cheminsave\schema_monschema.sql" --schema "monschema" "mabase"
pour exporter le DDL de ma base (par schéma) en excluant les tables dont les noms commencent par t.
J'utilise pour cela l'option -T '*.t*' ou --exclude-table='*.t*'
Mais j’obtiens toujours le DDL des tables en question.
Qu'ai-je donc raté?
@+
OK commençons par là.
Salut
De plus les traces de postgres vous donneront plus de détail sur la raison du problème.
C'est pas évident.
Certains problèmes tels l'indisponibilité du port, l'absence de droit sur le dossier "data" ne sont pas tracés dans le log de PostgreSQL.
@+
Salut
Dans ces genres de situations on procède par élimination de cas.
Quelle est la dernière action sur le windows (installation, mise à jour, modification d'utilisateur, modification de droits ...) pouvant impacter le service PostgreSQL?
On peut commencer par vérifier le compte qui exécute PostgreSQL: c'est "SERVICE RÉSEAU". Si c'est pas le cas il faut le remettre; dans le cas échéant il faut vérifier que ce compte à tous les droits sur le dossier "data" de l'installation de PostgreSQL. Personnellement je place ce dossier hors de "programmes files".
@+
Salut
Dans ma compréhension...
Dans un environnement client/serveur: en local signifie sur la machine cliente.
Le terme "table locale" peut paraitre étrange en effet. J'ai compris que rjuju voulais dire que l'application cliente stocke (d'une manière ou d'une autre mais sécurisé) sur la machine cliente les infos (loggin+pwd+privilèges) des users.
Je pense que rjuju n'avait pas à ajouter le terme "locale" à "table" pour cette situation. Mais c'est déjà claire chez tout le monde
La solution adopté par svear pour verifier le mot de passe avant la modification est excellente à mon avis.
Mais pour ce qui est de laisser la gestion des privilèges avec l'application, client vaut mieux laisser le sgbd faire bien son travail sinon avec un projet moyen à plus (avec des sous domaines compta, facturation, paie...) ça peut devenir une vraies casse tête. voir mon projet www.logicoles.com
Je crois comprendre que la gestion des privilèges par l'application cliente est motivé par le prévision d'un gestionnaire de pool de connexions.
Je ne connais rein de ce concept à part qu'il aide PostgreSQL à dépasser une limitation de nombre de connexions. Si vous avez des tutos ou cours je suis preneur.
@+
Salut
Oui. J'avais justement un schema "admin" qui contenait des tables d'admin (comme par exemple une table qui gère la licence, la clef de chiffrement, etc). J'y ai rajouté une table "users" avec le login et le hash du mot de passe.
Donc la table est sur le serveur (dans la bd) et non sur le client (dans l'application cliente).
Or...
La distinction se ferait côté applicatif. Vous pouvez continuer à recevoir un utilisateur et mot de passe, et comparez ça avec une table locale contenant la liste des utilisateurs avec un secure hash du mot de passe. Votre applicatif retient alors l'utilisateur et autorise ou refuse les actions en fonction de son profil, également stocké dans des tables locales.
Donc pour lui la table des users en local signifie sur l'application cliente. Ce que je trouve vraiment hyper compliqué à mettre en œuvre (implanter toute la gestion des privilèges coté client!).
@+
Salut
La sujet m’intéresse assez.
Donc j'ai appliqué les conseils de rjurju. J'ai créé une table des users avec leur mot de passe.
La table es-elle en local comme l'a suggéré rjuju?
Je me dit qu'avec un client en application desktop la mise à jour de la table locale peut être une casse-tête.
@+
Salut
Pour le moment le rythme de sortie de pgadmin4 dépasse celui des packages offerts par les entreprises tierces.
Le mieux est donc d'éviter pgadmin4 lors de l'installation des packages et d'installer (et mettre à jour) pgadmin4 avec l'installeur proposé par pgadmin.org (actuellement à la version 4.19!)
@+
Salut
Peut être...
select ... from (pays cross join film) left join box_offices on box_offices.idfilm=film.idfilm
where box_offices.idfilm is null
@+
Salut
Problème résolu (je ne sais comment!). Je viens de télécharger les update.
Merci et @+
Salut
ça ne marche pas chez mois. J'ai tenté avec deux machines physiques en win10 (firefox, google chrome et ie) et un ubuntu virtuel!!! J'ai toujours "adresse introuvable"