Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 14/05/2012 01:58:30
- Jiff
- Membre
yakekchoz que je ne saisis pas (inserion d'un row)
Debian sid
Pg 9.1+129
=========
Salut forumers,
je ne saisis pas ce qui se passe, d'autant que ça fonctionnait correctement en début d'année (9.0?).
J'ai une table:
CREATE TABLE common.civility (
id SERIAL PRIMARY KEY,
label DA_LABEL,
shortcut DA_LABEL_S,
front BOOLEAN NOT NULL DEFAULT TRUE
) WITHOUT OIDS;
Le domaine DA_LABEL_S se présente comme suit:
(DA_LABEL d° mais longueur supérieure)
CREATE DOMAIN DA_LABEL_S AS VARCHAR(6)
NOT NULL
CHECK(char_length(VALUE) > 0);
Mais lorsque je veux insérer un row n'ayant qu'une seule lettre pour la colonne 'shorcut', je reçois cette erreur:
INSERT INTO common.civility VALUES (default, 'Monsieur', 'M', TRUE);
ERROR: value for domain da_label_s violates check constraint "da_label_s_check"
apatoukompri, parce que normalement 'M' a une longueur de 1 qui est donc > 0 (à moins qu'un casting automatique ne transforme 'M' en "char" au lieu de varchar?)
Je suppose que l'interface chaise/clavier est en cause, mais elle a du mal là.
Hors ligne
#2 14/05/2012 09:41:12
- rjuju
- Administrateur
Re : yakekchoz que je ne saisis pas (inserion d'un row)
Bonjour.
Je viens de tester vos requêtes sur un postgres 9.1.3 et cela fonctionne. La contrainte sur DA_LABEL_S a peut-être été changée entre temps.
Julien.
https://rjuju.github.io/
Hors ligne
#3 14/05/2012 13:59:49
- Jiff
- Membre
Re : yakekchoz que je ne saisis pas (inserion d'un row)
Effectivement, en contrôlant le domain, il-y-a un gros PB:
SELECT D.typname as domname, format_type(b.oid,NULL) as dombasetype,
D.typlen, D.typtypmod, D.typnotnull, D.typdefault, D.typndims, D.typdelim, C.consrc
FROM pg_type D
JOIN pg_type B ON B.oid = CASE WHEN B.typndims > 0 then D.typelem ELSE D.typbasetype END
JOIN pg_namespace N ON N.oid = B.typnamespace
JOIN pg_constraint C ON (D.typname || '_check') = C.conname
WHERE D.typtype = 'd' AND D.typnamespace = 2200::oid
ORDER BY D.typname;
da_label_s | character varying | -1 | 20 | t | | 0 | , | (char_length((VALUE)::text) > 1)
Alors que ça devrait être >0.
Etant donné que justement le source est dans un tableur pour éviter toute redondance, après grattage j'ai droit au tirage: un typo a fait que 3 lignes plus bas le domain DA_LABEL_M se nomme aussi DA_LABEL_S (et lui, il compare >1).
Désolé pour le bruit et merci.
Hors ligne
Pages : 1