Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
Здраствуйте. Я делаю программу на Дельфи где используэтся Postgres. Есть в программе функция для создание я базе дополнительных столбцов для таблицы. Таблица огромгая (много записей). И при создании столбца нужно время. Когда идет обработка запроса моя программа просто висит (точнене не реагирует на события, потому что выполняется одна из процедур). Я хочу сделать так чтобы была возможность распаралелить работу. Тоесть отделить эту процедуру. И чтобы была возможность ажать кнопку Отмена. Я не знаю как это сделать но уверен что у постгреса есть такая возможность. Сейчас я просто исполняю команду ALTER TABLE ADD column Я думаю что можно как-то создать транзакцию с возможностью отмены. Я представляю это так: запрос ALTER TABLE ADD column сделать какой то командой постгреса так чтобы исполнение команды продолжалось на фоне а результат запроса вернулся ввиде какого-то идентификатора. Потом я из своей программы время от времени делаю запрос который проверяет статус по идентификатору. Если еще идет исполнение то ждет секунду и опять. Если закончен то все в порядку. Если пользователь нажал Отмена, то я исполняю какой то запрос с этим идентификатором чтобы отменить операцию. Возможно ли такое? Я уверен что возможно но не знаю как. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 15:50 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
в libpq асинхронные запросы есть. Читайте документацию к вашим компонентам, или используйте библиотеку напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 16:18 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
Gelembjuk...Есть в программе функция для создание я базе дополнительных столбцов для таблицы. Таблица огромгая (много записей)....о, скока нам открытий чудных... кстати, кажется даже альтер тейбл в постгрессе выполняется в транзакции (и вполне таки откатывается). вот только можно ли в параллельном сеансе в нее, в таблу, т.е. что-то в это время пихать - не помню. произведите примитивный тест из под любого пгадмина над своей таблой - проверьте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 16:21 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
Serik Akhmetovв libpq асинхронные запросы есть. Читайте документацию к вашим компонентам, или используйте библиотеку напрямую.pfxtv fccby[hjyyjcnm bp gu? тьху зачем ассинхронность из пг, когда афтору проще открыть второе соединение из дельпхи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 16:23 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
assaзачем ассинхронность из пг, когда афтору проще открыть второе соединение из дельпхи.согласен, запустить еще один поток и открыть еще один коннект будет проще. assaкстати, кажется даже альтер тейбл в постгрессе выполняется в транзакции (и вполне таки откатывается). вот только можно ли в параллельном сеансе в нее, в таблу, т.е. что-то в это время пихать - не помню. произведите примитивный тест из под любого пгадмина над своей таблой - проверьте. имхо хороший тон всех выгонять из БД на время DDL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 16:30 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
Serik Akhmetovсогласен, запустить еще один поток и открыть еще один коннект будет проще. Тоесть есть возможность из второго соеденения прервать операцию? Но как это сделать? Как получить список операций которые выполняются в данный момент? И еще возможен ньоанс что кто-то в это время тоже запустил такую же операцию и не хочет ее прерывать. Вообще, какой раздел документации читать по этому впросу? P.S. Я использую компоненты Zeos ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 17:07 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
Gelembjuk Операции по изменению схемы БД должны быть эксклюзивными по отношению к изменяемым объектам - т.е. если кто-то начал менять что-то в таблице, то по хорошему, всем остальным надо закрыть воможность таких операций. Пишите свой лог таких операций и сверяйтесь по нему. Отмену изменений можно сделать только в рамках той же транзакции и соединения в которых они были инициированы. Текущий список выполняемых запросов можно посмотреть в таблице pg_stat_activity, если включена в конфиге сборка статистики. В принципе, можно посылать ID-процесса сигнал TERM, он тогда закроется и откатит все изменени. Такая ф-я есть у pg_ctl, значит и в базе есть.. не помню название. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:09 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
Извините за оффтоп, но мое глубокое убеждение таково, что динамическое изменение структуры БД является следствием неверно спроектированной структуры. И лучше сейчас что-то изменить, чем потом разгребать последствия. PS. Было бы неплохо узнать - для чего такое понадобилось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:47 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
pamirИзвините за оффтоп, но мое глубокое убеждение таково, что динамическое изменение структуры БД является следствием неверно спроектированной структуры. И лучше сейчас что-то изменить, чем потом разгребать последствия. PS. Было бы неплохо узнать - для чего такое понадобилось?Поддерживаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2007, 06:16 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
pamirИзвините за оффтоп, но мое глубокое убеждение таково, что динамическое изменение структуры БД является следствием неверно спроектированной структуры. И лучше сейчас что-то изменить, чем потом разгребать последствия. PS. Было бы неплохо узнать - для чего такое понадобилось? Это из-за того что я делаю разширение одной программы. Она не предусматривает создания плагинов. Но мой заказчик хочет получить некоторые особенные запросы из базы этой программы. Я сделал програмку на Дельфи которая просто конектится к той же базе. Но для моей программы нужен один дополнительный столбец в таблице, что-бы знать которые записи были обработаны (они все время добавляются той первой программой). Еще я создаю дополнительные индексы и таблицу. Это все делается только один раз при первом подключении. Возможен и другой вариант. Проверять новые записи по времени, но там несколько ньюансов (там не время добавления запис а время события). Вот так вот. Такая ситуация. Я лично проблемы не вижу, но пользователь не любит когда программа висит, всегда нужка кнопка Отмена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2007, 10:09 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
Если нужно создать какие-то столбцы таблицы пр первом подключении сделайте отдельно процедуру регистрации пользователя или инсталляции, которая включает такие действия, чтобы к началу работы программы все уже было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2007, 10:48 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
GelembjukНо для моей программы нужен один дополнительный столбец в таблице, что-бы знать которые записи были обработаны (они все время добавляются той первой программой). Еще я создаю дополнительные индексы и таблицу. Это все делается только один раз при первом подключении. Возможен и другой вариант. Проверять новые записи по времени, но там несколько ньюансов (там не время добавления запис а время события). Вот так вот. Такая ситуация. Я лично проблемы не вижу, но пользователь не любит когда программа висит, всегда нужка кнопка Отмена.Создайте однократно таблицу (или несколько) куда складывайте ID просмотренных записей или последний ID, если просмотр идет последовательно. И все, никаких новых полей. Но если это однократно, то можно и так как выше предложено alex_v13Если нужно создать какие-то столбцы таблицы пр первом подключении сделайте отдельно процедуру регистрации пользователя или инсталляции, которая включает такие действия, чтобы к началу работы программы все уже было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2007, 11:48 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
assa Gelembjuk...Есть в программе функция для создание я базе дополнительных столбцов для таблицы. Таблица огромгая (много записей)....о, скока нам открытий чудных... кстати, кажется даже альтер тейбл в постгрессе выполняется в транзакции (и вполне таки откатывается). вот только можно ли в параллельном сеансе в нее, в таблу, т.е. что-то в это время пихать - не помню. произведите примитивный тест из под любого пгадмина над своей таблой - проверьте. Да алтер действует в пределах транзакции но...!!!! при алтере нефига не перестраиваются "закешированные" в бакенде коннекта планы выполнения.. т.е. вероятнее всего пойдут ошибки которые при переконекте сраз исчезнут. я писал про это в маил лист.. мамаджан (вроде) мне ответил, что типа читайте батенька факу-это "фича". :/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2007, 12:39 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
pamirСоздайте однократно таблицу (или несколько) куда складывайте ID просмотренных записей или последний ID, если просмотр идет последовательно. И все, никаких новых полей. Но если это однократно, то можно и так как выше предложено Можно и так. Но тогда чтобы определить новые записи мне нужно будет делать обьединение двух таблиц и это замедлит работу. Я потому так изначально и сделал, что-бы быстрее было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2007, 15:36 |
|
||
|
Возможность отката
|
|||
|---|---|---|---|
|
#18+
wbear Да алтер действует в пределах транзакции но...!!!! при алтере нефига не перестраиваются "закешированные" в бакенде коннекта планы выполнения.. т.е. вероятнее всего пойдут ошибки которые при переконекте сраз исчезнут. я писал про это в маил лист.. мамаджан (вроде) мне ответил, что типа читайте батенька факу-это "фича". :/ Вроде как Том Лейн потихоньку какие-то патчи во возможности инвалидации планов выполнения коммитит, так что возможно скоро увидим результат. А пока - именно так, как Вы сказали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2007, 17:57 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34759576&tid=2005102]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
50ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 320ms |

| 0 / 0 |
