Postgres 9.5 СОЗДАТЬ ТАБЛИЦУ, ВКЛЮЧАЯ ВСЕ НЕТ ограничений FK? [Дубликат]

После того, как принятый ответ Гильермо был написан, переход CSS-перехода от 3 апреля 2012 года изменил поведение перехода видимости, и теперь можно решить эту проблему короче, без использования задержки перехода:

.myclass > div { 
                   transition:visibility 1s, opacity 1s; 
                   visibility:hidden;  opacity:0
               }
.myclass:hover > div 
               {   visibility:visible; opacity:1 }

Время выполнения, указанное для обоих переходов, должно быть, как правило, одинаковым (хотя немного более длительное время для видимости не является проблемой). Для текущей версии см. Мой блог http://www.taccgl.org/blog/css-transition-visibility.html#visibility-opacity .

W.r.t. название вопроса «Переходы на дисплее: свойство» и в ответ на комментарии Rui Marques и josh к принятому ответу: это решение работает в тех случаях, когда это не имеет значения, если свойство отображения или видимости (как это, вероятно, имело место в этом вопросе). Он не будет полностью удалять элемент как отображение: none, просто сделать его невидимым, но он все еще остается в потоке документа и влияет на положение следующих элементов. Переходы, которые полностью удаляют элемент, похожий на отображение: ни один не может быть выполнен с использованием высоты (как указано другими ответами и комментариями), максимальной высотой или краем-сверху / снизу, но также см. . Как я могу перейти на высоту: 0 ; высота: авто; используя CSS? и мой блог http://www.taccgl.org/blog/css_transition_display.html .

В ответ на комментарий GeorgeMillo: как свойства, так и необходимы оба перехода: свойство opacity используется для создания анимации затухания и затухания и свойства видимости, чтобы элемент не реагировал на события мыши. Переходы необходимы для непрозрачности визуального эффекта и видимости, чтобы задержать скрытие до тех пор, пока исчезновение не завершится.

8
задан klin 18 October 2015 в 23:41
поделиться

2 ответа

Нет возможности автоматически создавать внешние ключи в CREATE TABLE ... LIKE ....

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

LIKE source_table [like_option ...]

Непустые ограничения всегда копируются к новой таблице. Ограничения CHECK будут скопированы только в том случае, если указано ВКЛЮЧЕНИЕ КОНСТРУКЦИЙ [...]

Индексы, ограничения PRIMARY KEY и UNIQUE в исходной таблице будут созданы в новой таблице только в том случае, если указано предложение INCLUDING INDEXES .

На практике это легко с помощью инструментов графического интерфейса. Например, в 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)
12
ответ дан klin 28 August 2018 в 04:42
поделиться

Еще один способ - сбросить структуру таблицы, изменить ее имя в дампе и снова загрузить ее:

pg_dump -s -t old databases | sed 's/old/new/g' | psql
1
ответ дан Neel 28 August 2018 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: