powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / не получается написать скрипт для обновления БД
9 сообщений из 9, страница 1 из 1
не получается написать скрипт для обновления БД
    #35141829
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.

Нужно написать примерно следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
начать транзакцию.

version := SELECT version FROM subversion WHERE name = 'core'

Если version < '1.2' тогда
    // тут выполняется DDL скрипт

    UPDATE subversion SET version = '1.2' WHERE name = 'core'
конец Если

Коммит.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE subversion
(
  pk int4 NOT NULL,
  name varchar( 255 ) NOT NULL,
  version varchar( 255 ) NOT NULL,
  CONSTRAINT subversion_pkey PRIMARY KEY (pk)
) 
WITHOUT OIDS;

Проблема в том, что на MS SQL это легко писалось и работало... а в PG пока не получается )))
...
Рейтинг: 0 / 0
не получается написать скрипт для обновления БД
    #35141839
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читаем доку

и пишем по ней:
Код: plaintext
myVar := (SELECT version FROM subversion WHERE name = 'core')
а не работает.
ERROR: syntax error at or near "myVar" at character 1

PS postgreSQL ver 8.1
...
Рейтинг: 0 / 0
не получается написать скрипт для обновления БД
    #35141883
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDA читаем доку

и пишем по ней:
Код: plaintext
myVar := (SELECT version FROM subversion WHERE name = 'core')
а не работает.
ERROR: syntax error at or near "myVar" at character 1

PS postgreSQL ver 8.1
1) Точку с запятой в конце строки надо ставить.
2) Условные выражения, типа IF...ELSE, можно, вроде как, использовать внутри ХП
3) Как вариант (в ХП)
Код: plaintext
SELECT version INTO _myVar FROM subversion WHERE name = 'core';
...
Рейтинг: 0 / 0
не получается написать скрипт для обновления БД
    #35141949
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В PostgreSQL временные переменные, IF и прочая ерунда, а так же знак присваивания ":=" можно использовать только внутри ХП
...
Рейтинг: 0 / 0
не получается написать скрипт для обновления БД
    #35141983
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZashibisВ PostgreSQL временные переменные, IF и прочая ерунда, а так же знак присваивания ":=" можно использовать только внутри ХПБалин...

Тогда вопрос КАК можно сделать скрипт, который накатывает версию за версией в БД.
Под версией я имею в виду, что есть DDL который обновляет БД и работает поверх другого.

У нас пока руками, но это совсем не удобно.
...
Рейтинг: 0 / 0
не получается написать скрипт для обновления БД
    #35142050
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создайте ХП, в нее запихайте весь этот код, и вызывайте ее по мере надобности, или это проблематично?
...
Рейтинг: 0 / 0
не получается написать скрипт для обновления БД
    #35142146
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZashibisСоздайте ХП, в нее запихайте весь этот код, и вызывайте ее по мере надобности, или это проблематично?Прикол в том, что сам код генерируется на ходу по спец-файлу...
Тогда его еще нужно завернуть в ХП, запустить, а после работы удалить.

Кроме того КАК работают транзакции в ХП? мне казалось, что если часть ХП завалилась то откатится вся ХП. А нужно чтобы откатилась только завалившаяся часть и то, что после нее.
...
Рейтинг: 0 / 0
не получается написать скрипт для обновления БД
    #35142182
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще тупняк какой то )))

Код: plaintext
1.
2.
3.
4.
CREATE FUNCTION sales_tax(subtotal real) RETURNS real AS $$
BEGIN
    RETURN subtotal *  0 . 06 ;
END;
$$ LANGUAGE 'plpgsql';
пример из доки
ERROR: current transaction is aborted, commands ignored until end of transaction block
...
Рейтинг: 0 / 0
не получается написать скрипт для обновления БД
    #35142336
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно извратиться так:

Код: plaintext
1.
2.
select case when (SELECT version FROM subversion WHERE name = 'core') < '1.2' then
    exec_query('update subversion set version = ''1.2''; --вызов ваших DDL-- ') end; 

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE FUNCTION exec_query (query text) returns int as
$$
declare
begin
execute query;
return  0 ;
end
$$ language plpgsql;

exec_query создается раз и навсегда, в будущем может вам еще пригодиться.
Параметром ей передаете запрос в текстовом виде, все слеши в запросах удваивайте.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / не получается написать скрипт для обновления БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]