Em 10 de setembro de 2010 14:51, Osvaldo Kussama <osvaldo.kuss...@gmail.com> escreveu: > Para mim deu certo: > > bdteste=# CREATE TEMP TABLE tst_cons( > bdteste(# nome text, > bdteste(# CONSTRAINT funcionarios_nome_check CHECK (nome::text ~* > '^[[:alpha:]á-ú][[:alpha:]á-ú ]*[[:alpha:]á-ú]$'::text)); > CREATE TABLE > bdteste=# INSERT INTO tst_cons(nome) VALUES ('João'); > INSERT 0 1 > bdteste=# INSERT INTO tst_cons(nome) VALUES ('João '); > ERROR: new row for relation "tst_cons" violates check constraint > "funcionarios_nome_check" > bdteste=# > bdteste=# INSERT INTO tst_cons(nome) VALUES (' João'); > ERROR: new row for relation "tst_cons" violates check constraint > "funcionarios_nome_check" > bdteste=# > bdteste=# INSERT INTO tst_cons(nome) VALUES ('João é nome válido'); > INSERT 0 1 > bdteste=# INSERT INTO tst_cons(nome) VALUES ('João 1º'); > ERROR: new row for relation "tst_cons" violates check constraint > "funcionarios_nome_check" > bdteste=# > bdteste=# SELECT * FROM tst_cons; > nome > -------------------- > João > João é nome válido > (2 rows) >
Complementando: Creio que se você utilizar a expressão regular: E'^[A-ZÀ-Ý][A-ZÀ-Ý ]*[A-ZÀ-Ý]$' você irá considerar todos os caracteres normais e acentuados (maiúsculos). Assim sua constraint ficaria: CONSTRAINT funcionarios_nome_check CHECK (nome::text ~* E'^[A-ZÀ-Ý][A-ZÀ-Ý ]*[A-ZÀ-Ý]$'::text)); Outra possibilidade é você testar apenas: CONSTRAINT funcionarios_nome_check CHECK (nome::text ~* E'^[A-ZÀ-Ý ]+$'::text)); e utilizar, por ex em uma trigger, a função trim(both from nome) para eliminar eventuais espaços no início ou fim do nome. Osvaldo _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral