Vous n'êtes pas identifié(e).
Pages : 1
Bonjour ! Je suis actuellement en train de renforcer mes connaissance en bdd et je rencontre un souci avec les DOMAIN et je créer tout mes scripts en utilisant sqitch, je m'explique.
J'ai une table "file" qui à un champ "media_picture_url", dans lequel j'y mettrais des lien vers des images en ligne. J'ai donc crée la tables avec ses champs, et dans un autre script j'y ai mis cela:
CREATE DOMAIN url_checker as TEXT
CHECK (
VALUE ~ '^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_.+~#?&\/=]*)$'
);
ALTER TABLE "file"
ALTER COLUMN "media_picture_url" TYPE url_checker;
La création de la table fonctionne, l'ajout du domaine aussi, hors, lorsque je veux insérer un lien dans le champs en question, postgres me renvoi l'erreur suivante:
ERREUR: la valeur pour le domaine url_checker viole la contrainte de vérification « url_checker_check »
J'ai évidement essayé plusieurs url différente, j'ai d'ailleurs également testé la regex sur regex101 ainsi que tout les liens que je voulais insérer dans ma bdd, je bloque...
Merci d'avance !
Hors ligne
\b dans la regex correspond dans Postgres au caractère de code 8 (backspace), qui n'a pas de raison d'être dans une URL (qui est probablement illégal dans une URL d'ailleurs vu que c'est un caractère de contrôle).
cf la doc: https://www.postgresql.org/docs/current … ching.html
Table 9.20. Regular Expression Character-Entry Escapes
Escape Description
\a alert (bell) character, as in C
\b backspace, as in C
En revanche dans Perl \b correspond à une limite (boundary), cf https://perldoc.perl.org/perlrebackslas … 7D%2C-%5CB
Moralité vous essayez une expression régulière qui marcherait sûrement avec Perl mais non compatible avec Postgres.
La doc de Perl ci-dessus dit que \b est équivalent à
(?:(?<=\w)(?!\w)|(?<!\w)(?=\w))
donc vous pouvez essayer de remplacer par cette séquence.
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
Pages : 1