2012-03-25 4 views
15

Я медленно перехожу из MSSQL в PostgreSQL.Как отредактировать хранимую процедуру PostgreSQL?

В MSSQL я мог бы вызвать редактирование уже сохраненной процедуры или функции, а оболочка администрирования (SQL Server Management Studio) показала мне текст процедуры, поэтому мне не нужно было хранить исходный код где-то в текстовом файле.

Как сделать то же самое с PostgreSQL удобным способом? Я использую pgAdmin III.

+3

Сохранение хранимой процедуры во внешнем файле настоятельно рекомендуется в любом случае (в идеале в системе управления версиями) –

+0

@a_horse_with_no_name:. Я предпочитаю другое У меня есть тестовый кластер db для каждого продуктивного кластера db (редко скопированного), где я экспериментирую.Когда считается хорошим, я реализую в продуктивном кластере db. В дополнение к обычным резервным копиям я запускаю частые резервные копии только для схемы, особенно до/после изменений в схеме. Традиционные хранилища имеют ограниченное использование для схем баз данных, поскольку данные постоянно меняются, и многие изменения не могут (легко) быть отменены. –

+1

@ErwinBrandstetter: проблема с этим подходом заключается в том, что вы теряете overv iew, которые необходимо изменить, чтобы получить базу данных с версии x до версии x + 1. Вам необходимо централизованное место, где каждое изменение можно отслеживать (и в идеале отображаться, например, в билетной эмиссии). Если у вас более одной среды (разработка, тестирование, постановка, валидация, регрессия, предварительная подготовка, производство) и, возможно, даже более одной версии в производстве (думаю, разные страны), я не вижу, как вы можете отслеживать все изменения без VCS. –

ответ

18

В официальных дистрибутивах Postgres есть 2 клиента - один CLI psql и один графический интерфейс pgAdmin. Оба поддерживают то, что вы хотите: для psql это \ef и для pgAdmin - щелкните правой кнопкой мыши по функции, «Свойства», вкладка «Код».

+1

'\ ef' работает, но это не спасет функцию? – redolent

+2

@redolent, вам может потребоваться вручную добавить ';' в конец открытого файла или просто добавить один символ ';' и нажать enter, если вы уже закрыли редактор. – 10gistic

1

phpPgAdmin позволит вам редактировать хранимые процедуры и редактировать их в интерфейсе. Также настоятельно рекомендуется оставить комментарий на свой вопрос о сохранении их снаружи для контроля версий.

3

В pgAdmin вы можете сделать вашу жизнь проще, если вы активируете эту опцию:

File -> Options .. -> Query Tool -> [х] копирования SQL из основной формы диалога SQL

Затем все, что отображается на панели SQL, будет скопировано в недавно открытое окно инструмента запросов. Итак, выберите функцию в обозревателе объектов и щелкните значок увеличительного стекла на панели инструментов.

Обратите внимание на открытую ошибку в текущей версии 1.14.2. По умолчанию public имеет привилегию EXECUTE на функции. Вы можете использовать REVOKE эту привилегию, что полезно только для функций SECURITY DEFINER. Но этот REVOKE отсутствует в запросах с обратной обработкой DDL из pgAdmin (NULL запутался с пустым ACL). Осторожно, если вы удалите и воссоздаете такую ​​функцию!

2

Это также удобный способ редактировать код и тестировать его.

1) Извлеките код требуемой функции SQL из pgAdmin.

2) Поместите код с помощью функции в файл file.sql.

3) Создайте файл оболочка/биту в том же каталоге с file.sql:

psql -U postgres dbname < file.sql 

4) Поместите ярлык для файла оболочки/летучей мыши в быструю панель.

5) Отредактируйте файл с помощью своего любимого текстового редактора и нажмите ярлык, чтобы обновить функцию.

+0

В целом, я считаю, что ваш вклад полезен, но в этом конкретном случае ваше предложение - именно то, что сделал ПАУЛ * НЕ *: «Мне не нужно было хранить его исходный код где-то в текстовом файле» - вероятно, потому, что он считает, что этот подход слишком сложный, чтобы его можно было назвать «удобным». – ChristophK

0

правой кнопкой мыши на функции в дереве объектов (на левой стороне) -> Сценарии -> Сценарий CREATE

-или-

Выполнить новый запрос SQL -> копировать код «создать или заменить функции ..."Чтобы он

Затем отредактируйте скрипт и не забыл выполнить его

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