2012-06-13 2 views
1

Мне интересно, могу ли я использовать триггер таблицы, чтобы «игнорировать» столбцы, которые содержатся в инструкции COPY от STDIN, но которые не находятся в целевой таблице. Извините, если формулировка/синтаксис вопроса выключена, но вот и объяснение того, что я пытаюсь сказать. Я новичок в триггерах, поэтому любой совет полезен.PostgreSQL Создание триггера вставки, который заменяет столбцы

Я использую импортер PostGIS Shapefile для копирования шейп-файлов в пространственные таблицы в моей базе данных PostgreSQL.

Это создает COPY заявление, в котором содержатся все поля в шейп-то вроде:

COPY "public"."stations" ("column1","column2","column3","column4", geom) FROM stdin; 

column1 и column2 находятся в файле, но не в целевой таблице, поэтому COPY не удается.

Есть ли способ, чтобы создать триггер, чтобы создать что-то, что будет иметь тот же результат:

COPY "public"."stations" ("column3","column4", geom) FROM stdin; 

ответ

2

Нет, вы не можете пропустить столбцы, которые присутствуют в исходном файле. Это приведет к ошибке, до триггеры даже вызывают. И вы также не можете использовать правила. I quote the manual:

COPY FROM будет вызывать все триггеры и проверить ограничения на стол назначения. Однако он не будет ссылаться на правила.

Вы можете отредактировать файл или использовать таблицу с временного промежуточной:

  1. COPY временную таблицу с соответствующими столбцами.

  2. Используйте INSERT, чтобы записать нужные столбцы в конечную целевую таблицу (таблицы) - или весь диапазон команд SQL DDL для более сложных вопросов.

+1

Стадии я в конечном итоге было создание представления с загруженными колоннами и запустив inserst к представлению (есть возможность запустить загрузку как INSERT ON вместо COPY, который я пропустил). И установка триггера INSTEAD OF в представлении для вставки в целевую таблицу с нужными столбцами. - Если эта формулировка имеет смысл – avianattackarmada

+0

@avianattackarmada: Да. И это, вероятно, самая быстрая реализация вышеуказанного маршрута. –

Смежные вопросы