PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

konversi tipe data MySQL SET ke Postgres

Anda dapat menggunakan larik untuk kolom dan operator "diisi oleh" untuk batasan CHECK:

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

Dan kemudian hal-hal seperti ini terjadi:

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

Ini akan memungkinkan {red,red} di kolom sekalipun; jika tidak mengizinkan {red,red} penting, maka Anda dapat menambahkan fungsi untuk memeriksa nilai warna unik dalam array dan menyesuaikan batasan 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))
);

Pilihan lain adalah tumpukan tabel asosiasi dengan nilai skalar sederhana di kolom. Namun, ini mungkin rumit jika Anda memiliki enam kolom ini. Anda juga dapat menggunakan versi fungsi Erwin jika Anda perlu khawatir tentang NULL di "set":

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. Solusi Cloud PostgreSQL Terkelola Tolok Ukur - Bagian Satu:Amazon Aurora

  2. Penyortiran PostgreSQL salah

  3. Tipe data apa untuk garis lintang dan garis bujur?

  4. Heroku psql:FATAL:slot koneksi yang tersisa dicadangkan untuk koneksi superuser non-replikasi

  5. PostgreSQL:cara menginstal ekstensi plpythonu