PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

конвертирайте типа данни на MySQL SET в Postgres

Можете да използвате масив за колоната и оператор "се съдържа от" за ограничението CHECK:

create table pancakes (
    color varchar(10)[] not null,
    check (color <@ ARRAY['red', 'green', 'blue']::varchar[])
);

И тогава се случват неща като това:

=> insert into pancakes values (ARRAY['red']);
INSERT 0 1
=> insert into pancakes values (ARRAY['red','green','blue']);
INSERT 0 1
=> insert into pancakes values (ARRAY['red','green','blue','black']);
ERROR:  new row for relation "pancakes" violates check constraint "pancakes_color_check"
=> select * from pancakes;
      color       
------------------
 {red}
 {red,green,blue}
(2 rows)

Това ще позволи {red,red} в колоната все пак; ако се забранява {red,red} е важно, тогава можете да добавите функция за проверка за уникални стойности на цветовете в масива и да коригирате ограничението CHECK:

create function has_unique_colors(varchar[]) returns boolean as $$
    select (select count(distinct c) from unnest($1) as dt(c)) = array_length($1, 1);
$$ language sql;

create table pancakes (
    color varchar(10)[] not null,
    check (color <@ ARRAY['red', 'green', 'blue']::varchar[] and has_unique_colors(color))
);

Друг вариант би бил купчина асоциативни таблици с прости скаларни стойности в колоните. Това обаче може да е тромаво, ако имате шест от тези колони. Можете също да използвате версията на Erwin на функцията, ако трябва да се притеснявате за NULL в "наборите":

create function has_unique_colors(varchar[]) returns boolean as $$
    select not exists(select c from unnest($1) dt(c) group by 1 having count(*) > 1);
$$ language sql;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получа локални данни в база данни само за четене с помощта на dplyr?

  2. Изчисляване на проценти със заявка GROUP BY

  3. PostgreSQL:ВЪНШЕН КЛЮЧ/КАСКАДА НА ИЗТРИВАНЕ

  4. Алтернативен изходен формат за psql

  5. Експортирайте и импортирайте дъмп на таблица (.sql) с помощта на pgAdmin