Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Возможность отката / 15 сообщений из 15, страница 1 из 1
28.08.2007, 15:50
    #34758644
Gelembjuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
Здраствуйте.

Я делаю программу на Дельфи где используэтся Postgres.
Есть в программе функция для создание я базе дополнительных столбцов для таблицы. Таблица огромгая (много записей). И при создании столбца нужно время. Когда идет обработка запроса моя программа просто висит (точнене не реагирует на события, потому что выполняется одна из процедур).

Я хочу сделать так чтобы была возможность распаралелить работу. Тоесть отделить эту процедуру. И чтобы была возможность ажать кнопку Отмена.

Я не знаю как это сделать но уверен что у постгреса есть такая возможность.

Сейчас я просто исполняю команду ALTER TABLE ADD column

Я думаю что можно как-то создать транзакцию с возможностью отмены.
Я представляю это так:
запрос ALTER TABLE ADD column сделать какой то командой постгреса так чтобы исполнение команды продолжалось на фоне а результат запроса вернулся ввиде какого-то идентификатора. Потом я из своей программы время от времени делаю запрос который проверяет статус по идентификатору. Если еще идет исполнение то ждет секунду и опять. Если закончен то все в порядку. Если пользователь нажал Отмена, то я исполняю какой то запрос с этим идентификатором чтобы отменить операцию.

Возможно ли такое?

Я уверен что возможно но не знаю как.

Спасибо.
...
Рейтинг: 0 / 0
28.08.2007, 16:18
    #34758761
Serik Akhmetov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
в libpq асинхронные запросы есть.
Читайте документацию к вашим компонентам, или используйте библиотеку напрямую.
...
Рейтинг: 0 / 0
28.08.2007, 16:21
    #34758768
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
Gelembjuk...Есть в программе функция для создание я базе дополнительных столбцов для таблицы. Таблица огромгая (много записей)....о, скока нам открытий чудных...


кстати, кажется даже альтер тейбл в постгрессе выполняется в транзакции (и вполне таки откатывается). вот только можно ли в параллельном сеансе в нее, в таблу, т.е. что-то в это время пихать - не помню. произведите примитивный тест из под любого пгадмина над своей таблой - проверьте.
...
Рейтинг: 0 / 0
28.08.2007, 16:23
    #34758776
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
Serik Akhmetovв libpq асинхронные запросы есть.
Читайте документацию к вашим компонентам, или используйте библиотеку напрямую.pfxtv fccby[hjyyjcnm bp gu?
тьху
зачем ассинхронность из пг, когда афтору проще открыть второе соединение из дельпхи.
...
Рейтинг: 0 / 0
28.08.2007, 16:30
    #34758821
Serik Akhmetov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
assaзачем ассинхронность из пг, когда афтору проще открыть второе соединение из дельпхи.согласен, запустить еще один поток и открыть еще один коннект будет проще.

assaкстати, кажется даже альтер тейбл в постгрессе выполняется в транзакции (и вполне таки откатывается). вот только можно ли в параллельном сеансе в нее, в таблу, т.е. что-то в это время пихать - не помню. произведите примитивный тест из под любого пгадмина над своей таблой - проверьте. имхо хороший тон всех выгонять из БД на время DDL.
...
Рейтинг: 0 / 0
28.08.2007, 17:07
    #34758994
Gelembjuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
Serik Akhmetovсогласен, запустить еще один поток и открыть еще один коннект будет проще.
Тоесть есть возможность из второго соеденения прервать операцию?
Но как это сделать? Как получить список операций которые выполняются в данный момент? И еще возможен ньоанс что кто-то в это время тоже запустил такую же операцию и не хочет ее прерывать.

Вообще, какой раздел документации читать по этому впросу?

P.S. Я использую компоненты Zeos
...
Рейтинг: 0 / 0
28.08.2007, 19:09
    #34759461
alex_v13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
Gelembjuk

Операции по изменению схемы БД должны быть эксклюзивными по отношению к изменяемым объектам - т.е. если кто-то начал менять что-то в таблице, то по хорошему, всем остальным надо закрыть воможность таких операций. Пишите свой лог таких операций и сверяйтесь по нему. Отмену изменений можно сделать только в рамках той же транзакции и соединения в которых они были инициированы.

Текущий список выполняемых запросов можно посмотреть в таблице pg_stat_activity, если включена в конфиге сборка статистики. В принципе, можно посылать ID-процесса сигнал TERM, он тогда закроется и откатит все изменени. Такая ф-я есть у pg_ctl, значит и в базе есть.. не помню название.
...
Рейтинг: 0 / 0
28.08.2007, 19:47
    #34759576
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
Извините за оффтоп, но мое глубокое убеждение таково, что динамическое изменение структуры БД является следствием неверно спроектированной структуры. И лучше сейчас что-то изменить, чем потом разгребать последствия.

PS. Было бы неплохо узнать - для чего такое понадобилось?
...
Рейтинг: 0 / 0
29.08.2007, 06:16
    #34760015
Serik Akhmetov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
pamirИзвините за оффтоп, но мое глубокое убеждение таково, что динамическое изменение структуры БД является следствием неверно спроектированной структуры. И лучше сейчас что-то изменить, чем потом разгребать последствия.

PS. Было бы неплохо узнать - для чего такое понадобилось?Поддерживаю.
...
Рейтинг: 0 / 0
29.08.2007, 10:09
    #34760327
Gelembjuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
pamirИзвините за оффтоп, но мое глубокое убеждение таково, что динамическое изменение структуры БД является следствием неверно спроектированной структуры. И лучше сейчас что-то изменить, чем потом разгребать последствия.

PS. Было бы неплохо узнать - для чего такое понадобилось?

Это из-за того что я делаю разширение одной программы. Она не предусматривает создания плагинов. Но мой заказчик хочет получить некоторые особенные запросы из базы этой программы. Я сделал програмку на Дельфи которая просто конектится к той же базе.
Но для моей программы нужен один дополнительный столбец в таблице, что-бы знать которые записи были обработаны (они все время добавляются той первой программой). Еще я создаю дополнительные индексы и таблицу. Это все делается только один раз при первом подключении.

Возможен и другой вариант. Проверять новые записи по времени, но там несколько ньюансов (там не время добавления запис а время события).

Вот так вот. Такая ситуация. Я лично проблемы не вижу, но пользователь не любит когда программа висит, всегда нужка кнопка Отмена.
...
Рейтинг: 0 / 0
29.08.2007, 10:48
    #34760484
alex_v13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
Если нужно создать какие-то столбцы таблицы пр первом подключении сделайте отдельно процедуру регистрации пользователя или инсталляции, которая включает такие действия, чтобы к началу работы программы все уже было.
...
Рейтинг: 0 / 0
29.08.2007, 11:48
    #34760752
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
GelembjukНо для моей программы нужен один дополнительный столбец в таблице, что-бы знать которые записи были обработаны (они все время добавляются той первой программой). Еще я создаю дополнительные индексы и таблицу. Это все делается только один раз при первом подключении.

Возможен и другой вариант. Проверять новые записи по времени, но там несколько ньюансов (там не время добавления запис а время события).

Вот так вот. Такая ситуация. Я лично проблемы не вижу, но пользователь не любит когда программа висит, всегда нужка кнопка Отмена.Создайте однократно таблицу (или несколько) куда складывайте ID просмотренных записей или последний ID, если просмотр идет последовательно. И все, никаких новых полей. Но если это однократно, то можно и так как выше предложено
alex_v13Если нужно создать какие-то столбцы таблицы пр первом подключении сделайте отдельно процедуру регистрации пользователя или инсталляции, которая включает такие действия, чтобы к началу работы программы все уже было.
...
Рейтинг: 0 / 0
29.08.2007, 12:39
    #34760994
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
assa Gelembjuk...Есть в программе функция для создание я базе дополнительных столбцов для таблицы. Таблица огромгая (много записей)....о, скока нам открытий чудных...


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

Да алтер действует в пределах транзакции но...!!!! при алтере нефига не перестраиваются "закешированные" в бакенде коннекта планы выполнения.. т.е. вероятнее всего пойдут ошибки которые при переконекте сраз исчезнут.
я писал про это в маил лист.. мамаджан (вроде) мне ответил, что типа читайте батенька факу-это "фича". :/
...
Рейтинг: 0 / 0
29.08.2007, 15:36
    #34761939
Gelembjuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
pamirСоздайте однократно таблицу (или несколько) куда складывайте ID просмотренных записей или последний ID, если просмотр идет последовательно. И все, никаких новых полей. Но если это однократно, то можно и так как выше предложено


Можно и так. Но тогда чтобы определить новые записи мне нужно будет делать обьединение двух таблиц и это замедлит работу. Я потому так изначально и сделал, что-бы быстрее было.
...
Рейтинг: 0 / 0
29.08.2007, 17:57
    #34762650
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможность отката
wbear
Да алтер действует в пределах транзакции но...!!!! при алтере нефига не перестраиваются "закешированные" в бакенде коннекта планы выполнения.. т.е. вероятнее всего пойдут ошибки которые при переконекте сраз исчезнут.
я писал про это в маил лист.. мамаджан (вроде) мне ответил, что типа читайте батенька факу-это "фича". :/
Вроде как Том Лейн потихоньку какие-то патчи во возможности инвалидации планов выполнения коммитит, так что возможно скоро увидим результат. А пока - именно так, как Вы сказали.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Возможность отката / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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