PostgreSQL: как скопировать ограничения и индексы из другой таблицы после заполнения таблицы

Я использую PostgreSQL 9.3.4 в Windows. Для многих таблиц в моей базе данных мне нужно создать другую версию таблиц в другой схеме с меньшим количеством записей (что определяется простым условием).

Например, скажем, у меня есть таблица public.orders с 15 миллионами записей. Я хочу создать таблицу myschema.orders с заказами, размещенными только после 1 января 2010 года. Это условие уменьшает таблицу с 15 до 1,5 миллионов записей.

Моя проблема: я хочу, чтобы myschema.orders имели те же ограничения и индексы, что и public.orders, но я бы хотел добавить их после заполнения таблицы, так как это должно быть быстрее. Я бы предпочел не использовать представление, потому что это было бы намного медленнее. Я могу сделать:

create table myschema.orders (like public.orders including all);
insert into myschema.orders select * public.orders where MyCondition = True

Первая строка копирует все ограничения (исключая внешние ключи) и индексы перед заполнением таблицы. Код работает, но примерно в 15 раз медленнее, чем вставка тех же записей в таблицу без ограничений.

Какой самый простой способ сначала заполнить таблицу, а затем скопировать ограничения? Или я могу отключить, а затем снова включить ограничения? Мне нужно сделать это примерно для 30 таблиц, каждая из которых имеет около 10 ограничений и 7 индексов, поэтому я хотел бы максимально автоматизировать процесс.

Спасибо!

0 ответов

Другие вопросы по тегам