2014-02-06 4 views
1

Я написал свой собственный скрипт для создания файла SQL восстановления, и одна из первых задач для восстановления - удалить все ограничения, которые должны быть там. (Не волнуйтесь, я ограничиваю свой скрипт на те, которые существуют на момент создания резервной копии.)dropping constraint throws error

Вот общий фрагмент кода

ALTER TABLE ONLY data DROP CONSTRAINT IF EXISTS data_pkey; 

Тестирование это на моей собственной среде разработки работает как ожидается. Тем не менее, запустив его на сервере тот же код выдает ошибку:

ERROR: syntax error at or near "EXISTS" 
LINE 1: ALTER TABLE ONLY data DROP CONSTRAINT IF EXISTS data_pkey; 

Если IF EXISTS часть удаляется и синтаксис:

ALTER TABLE ONLY data DROP CONSTRAINT data_pkey; 

скрипт запускается без проблем.

Я проверил postgres.org в разделе ALTER TABLE и мой синтаксис действителен.

+3

Версии обеих установок? «IF EXISTS» был введен в Postgres 9.2. –

+0

IF EXISTS должен быть введен до 9.2 для моей среды разработки 9.1.11. Но я думаю, вы ответили на вопрос. Запрос версии через phpPgAdmin на производственном сервере, и это всего лишь 8.4, а не 9.1, поскольку документация заставила меня поверить, – dwlamb

+0

Да, моя ошибка - это 9.0, а не 9.2. –

ответ

1

В качестве временного решения для старых версий вы можете:

  • Безоговорочно падение ограничения и перехвата ошибки; или

  • Проверьте information_schema или pg_catalog на наличие ограничений, и только оставьте его, если найдете его уже существующим.

+0

Хорошее ожидание моего последующего вопроса: поскольку я не могу использовать 'IF EXISTS' из-за версии как 8.4, как мне развернуть скрипт? :-) Спасибо за ответ – dwlamb