Нет возможности автоматически создавать внешние ключи в CREATE TABLE ... LIKE ...
.
Для документация:
LIKE source_table [like_option ...]
Непустые ограничения всегда копируются к новой таблице. Ограничения CHECK будут скопированы только в том случае, если указано ВКЛЮЧЕНИЕ КОНСТРУКЦИЙ [...]
Индексы, ограничения PRIMARY KEY и UNIQUE в исходной таблице будут созданы в новой таблице только в том случае, если указано предложение INCLUDING INDEXES .
blockquote>На практике это легко с помощью инструментов графического интерфейса. Например, в 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)
Лучший способ вокруг этого состоит в том, чтобы обучить разработчиков. После того, как Вы сделаете обновление в TortoiseSVN, он показывает Вам список затронутых файлов. Просто двойной щелчок по каждому файлу даст Вам разность между ними. Затем Вы сможете видеть то, что изменилось между Вашей версией и последней версией репозитория.
Вот прием для TortoiseSVN:
, Как выключить “auto-merge” в Подверсии
, Прием для svn.exe должен установить svn внешний различный инструмент на программу, которая постоянно перестанет работать.
svn --diff-cmd=/bin/false
, Если внешняя различная программа перестала работать, svn приходит к заключению, что конфликт неразрешим и не объединил бы его.
Я предложил бы, чтобы Вы учились работать с естественной моделью Subversion если вообще возможный. На практике мы находим, что конфликты редки, и тип логического конфликта, о котором Вы говорите почти не существующий (я не могу вспомнить экземпляр за прошлые 4 года в нашем репозитории).
Члены команды должны регистрация изменяться в максимально маленьком масштабе (при поддержании правильности) вместо того, чтобы обработать в пакетном режиме целую дневную работу, чтобы просто регистрировать его однажды. Это уменьшит возможность продвижения на чужую работу.
, Если Вы обеспокоены приблизительно конкретным изменением, что делаете Подверсию, действительно обеспечивает блокировка механизм, чтобы позволить Вам предотвратить другие изменения в файле. Посмотрите Красная книга главы по блокировка .