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

Bagaimana cara menyalin struktur satu tabel ke tabel lain dengan batasan kunci asing di psql?

Tidak ada opsi untuk membuat kunci asing secara otomatis di CREATE TABLE ... LIKE ... .

Untuk dokumentasi:

Dalam praktiknya mudah dengan alat GUI. Misalnya, di PgAdmin III:

  • salin deklarasi (DDL) dari source_table ke alat kueri (ctrl-e),
  • mengedit deklarasi,
  • jalankan sql.

Dalam skrip SQL Anda dapat menggunakan fungsi berikut. Asumsi penting:kunci asing tabel sumber memiliki nama yang benar yaitu nama mereka mengandung nama tabel sumber (situasi yang umum).

create or replace function create_table_like(source_table text, new_table text)
returns void language plpgsql
as $$
declare
    rec record;
begin
    execute format(
        'create table %s (like %s including all)',
        new_table, source_table);
    for rec in
        select oid, conname
        from pg_constraint
        where contype = 'f' 
        and conrelid = source_table::regclass
    loop
        execute format(
            'alter table %s add constraint %s %s',
            new_table,
            replace(rec.conname, source_table, new_table),
            pg_get_constraintdef(rec.oid));
    end loop;
end $$;

Contoh penggunaan:

create table base_table (base_id int primary key);
create table source_table (id int primary key, base_id int references base_table);

select create_table_like('source_table', 'new_table');

\d new_table

   Table "public.new_table"
 Column  |  Type   | Modifiers 
---------+---------+-----------
 id      | integer | not null
 base_id | integer | 
Indexes:
    "new_table_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
    "new_table_base_id_fkey" FOREIGN KEY (base_id) REFERENCES base_table(base_id)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL Penskalaan Vertikal

  2. Postgres menemukan file konfigurasi di linux

  3. Postgres dump hanya bagian dari tabel untuk snapshot dev

  4. Pengumpulan aneh dengan postgresql

  5. Mendapatkan kunci yang dibuat secara otomatis dari penyisipan baris di musim semi 3 / PostgreSQL 8.4.9