5 votes

PostgreSQL - comment interdire l'utilisation d'espaces dans certains champs de chaînes

Je veux interdire l'utilisation d'espaces dans certains champs de texte/varchar.

Mieux encore, il serait préférable d'avoir seulement un ensemble de caractères autorisés à utiliser, comme:

[a-zA-Z0-9_\-]

Et je veux en faire une règle pour tous les champs VARCHAR qui sont membres de la clé primaire dans leurs tables.

Cela devrait être fait au niveau de la base de données et pourrait générer une exception lors de la tentative d'insertion d'un enregistrement incorrect ou de la mise à jour d'un champ clé avec une valeur invalide.

Cela peut-il être fait au niveau de la base de données? Devrais-je utiliser Pl/Perl pour cela, ou existe-t-il une méthode plus simple?

8voto

Vous n'avez même pas besoin de procédures stockées:

altérer la table xxx ajouter la contrainte check_valid_chars Vérifier (votre_colonne ~ '^[a-zA-Z0-9_\-]+$') ;

devrait fonctionner.

4voto

Vous pouvez définir un domaine, consultez http://www.postgresql.org/docs/current/interactive/sql-createdomain.html en bas de la page, il y a un exemple sur le code postal des États-Unis.

0voto

Christian Vik Points 1555

En voyant votre dernier commentaire, vous pourriez peut-être utiliser des contraintes CHECK et une recherche regex? Mais vous devrez modifier le schéma (tables) et l'insérer pour chaque champ.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X