PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

przekonwertować typ danych MySQL SET na Postgres

Możesz użyć tablicy dla kolumny i operatora "jest zawarty przez" dla ograniczenia CHECK:

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

A potem dzieją się takie rzeczy:

=> 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)

To pozwoli {red,red} chociaż w kolumnie; jeśli nie zezwalasz na {red,red} jest ważne, możesz dodać funkcję sprawdzającą unikalne wartości kolorów w tablicy i dostosowywać ograniczenie 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))
);

Inną opcją byłby stos tabel asocjacyjnych z prostymi wartościami skalarnymi w kolumnach. Jednak może to być kłopotliwe, jeśli masz sześć z tych kolumn. Możesz również użyć wersji funkcji Erwina, jeśli musisz martwić się o wartości NULL w "zestawach":

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. Hibernacja i wielodostępna baza danych przy użyciu schematów w PostgreSQL

  2. Raport trendów PostgreSQL 2019:chmura prywatna i publiczna, migracje, kombinacje baz danych i najważniejsze powody

  3. Odpowiednik unpivot() w PostgreSQL

  4. array_agg dla typów tablic

  5. Badanie spowolnienia PostGIS (edycja 2019)