sql >> Database >  >> RDS >> PostgreSQL

Postgres-tekstkolom die alleen kleine letters toestaat/omzet en geen speciale tekens zoals:Ñöáè

Zet de gewenste karakters in de tweede parameter van deze translate() bel:

CREATE TABLE lawyer (
  id SERIAL PRIMARY KEY,
  name VARCHAR NOT NULL,
  url_name VARCHAR check(translate(url_name, 'abcdefghijklmnopqrstuvwxyz', '') = '') NOT NULL,
  gender VARCHAR(1) check (gender in ('m','f')) NOT NULL
);

insert into lawyer
values (default, 'Adam Smith', 'domain', 'f');

INSERT 0 1

insert into lawyer
values (default, 'Adam Smith', 'dömain', 'f');

ERROR:  new row for relation "lawyer" violates check constraint "lawyer_url_name_check"
DETAIL:  Failing row contains (3, Adam Smith, dömain, f).

Als alternatief kunt u een trigger maken, die de waarde direct wijzigt:

create or replace function lawyer_before_insert_or_update()
returns trigger language plpgsql as $$
begin
    new.url_name := lower(new.url_name);
    if translate(new.url_name, 'abcdefghijklmnopqrstuvwxyz', '') <> '' then
        raise exception 'Incorrect url name.';
    end if;
    return new;
end $$;

create trigger lawyer_before_insert_or_update
before insert or update on lawyer
for each row execute procedure lawyer_before_insert_or_update();

insert into lawyer
values (default, 'Adam Smith', 'DOMAIN', 'f')
returning *;

 id |    name    | url_name | gender 
----+------------+----------+--------
  4 | Adam Smith | domain   | f
(1 row)

INSERT 0 1

insert into lawyer
values (default, 'Adam Smith', 'dömain', 'f');

ERROR:  Incorrect url name.


  1. Hoe trage query-logboeken in AWS RDS MySQL in te schakelen

  2. Postgresql - kan database niet verwijderen vanwege enkele automatische verbindingen met DB

  3. Hoe de korte maandnaam van een datum in MariaDB te krijgen?

  4. Hoe gegevens te herstellen van een verwijderde Docker-container? Hoe kan ik het opnieuw verbinden met de gegevens?