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

Как да копирам структура на една таблица в друга с ограничения на чужд ключ в psql?

Няма опция за автоматично създаване на външни ключове в CREATE TABLE ... LIKE ... .

За документацията:

На практика е лесно с GUI инструменти. Например в PgAdmin III:

  • декларация за копиране (DDL) на source_table към инструмента за заявки (ctrl-e),
  • редактирайте декларацията,
  • изпълнете sql.

В SQL скрипт можете да използвате следната функция. Важно предположение:външните ключове на таблицата източник имат правилни имена, т.е. имената им съдържат име на таблица източник (което е типична ситуация).

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 $$;

Пример за използване:

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. Проверете дали JSON масивът на Postgres съдържа низ

  2. Как да получите PostgreSQL на VPS / Специализиран сървър

  3. Как да намерите броя на редовете за всичките си таблици в Postgres

  4. Основно наблюдение на PostgreSQL – част 3

  5. Как да търсите дали цялата дума съществува в низ в Postgres