Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
Например: begin; insert into.... Как в этом месте можно узнать, что перед insert был begin? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2005, 17:06 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
Транзакция в SQL всегда начинается с BEGIN. А зачем это тебе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 09:11 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
Кувалдин РоманТранзакция в SQL всегда начинается с BEGIN.В PostgreSQL - не всегда. http://www.postgresql.org/docs/8.0/static/sql-begin.html By default (without BEGIN), PostgreSQL executes transactions in "autocommit" mode, that is, each statement is executed in its own transaction and a commit is implicitly performed at the end of the statement (if execution was successful, otherwise a rollback is done). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 09:41 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
Кувалдин РоманА зачем это тебе? Мне досталась в наследство клиентская прога, достаточно коряво написанная, разбираться с ней некогда, надо заставить работать хоть как-то. Там может случиться некая лажа, что если какие-то данные вставляются с указанием begin insert.... - и вот если insert идёт достаточно долго, то в принципе есть возможность, нажав пару кнопок вставить ещё кое-чего ненужного. Я даже знаю людей, у которых это получается (у меня никак). В принципе, можно в клиенте кое-как поправить, но получится ещё более коряво. Я надеялся, что как-то по-научному это сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2005, 10:04 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
При вставке номер оператора внутри транзакции можно узнать косвенным путем - по значению системной колонки cmin, но и то - только начиная со втогого insert-а: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plaintext 1. 2. 3. 4. 5. 6. В функции на C можно наверняка получить доступ ко всей внутренней информации, но для этого в исходниках разбираться надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 03:31 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
Эх, ладно, тогда я сейчас буду бестолковые вопросы задавать, а меня все будут за это посылать известно куда. А я там был, и ничего не нашёл по теме. Как запретить ИМЕННО МНЕ вносить изменения в таблицу, пока не выполнен commit ? Ситуация такая: Есть таблицы: table1, table2, table3 На table1 - table1trigger, c примерным текстом: Код: plaintext 1. 2. 3. 4. 5. В клиентской проге 2 процедуры: При нажатии F2: Код: plaintext При нажатии F1: (после этого срабатывает наш замечательный триггер) Код: plaintext 1. 2. 3. После нажатия F1, когда уже в триггере пошло обновление table3, если обновление идёт достаточно долго, что случится, если пользователь нажмёт несколько раз кнопку F2? Я так думаю, что после работы table1trigger, обновится table2, что мне совсем не надо. Чего делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 18:12 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
vvv123 Я не очень понимаю такой ситуации: После нажатия F1, когда уже в триггере пошло обновление table3, если обновление идёт достаточно долго, что случится, если пользователь нажмёт несколько раз кнопку F2? Лучше переписать клиента - дисэйблить F2, пока не отработает F1. Но странно, что "кривой" клиент умеет выдавать асинхронные запросы - обычно начинающие используют синхронные вызовы в одном потоке, где таких проблем возникнуть не может в принципе. Если клиент уж слишком кривой - можно блокировать всю table2 на всё время транзакции (LOCK TABLE table1 после begin). К слову, вот этот кусок триггера: vvv123 Код: plaintext 1. 2. 3. 4. 5. можно написать без цикла: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 03:28 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
Подниму тему, но немного в другом ключе. Т.к. я ораклист, то никогда не задумывался о начале транзакции. Теперь же прежде чем сделать инсерт (или вызвать процедуру, которая это делает) нужно либо запустить транзакцию, либо, если она уже запущена, ничего не делать. В том случае, если мне нужно именно блок операций выполнить. Есть возможность определить - транзакция уже начата или еще нет? PS. Вообще-то понятно, что транзакциями будет управлять приложение, но все равно было бы удобно увидеть - начата ли транзакция. Приложение - скрипты PHP. Вызываемая функция может не знать, что наколбасила вызывающая. А взывающая после отработки вызываемой хотела бы знать - коммититься или ничего не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 16:17 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
pamirПодниму тему, но немного в другом ключе. Т.к. я ораклист, то никогда не задумывался о начале транзакции. Теперь же прежде чем сделать инсерт (или вызвать процедуру, которая это делает) нужно либо запустить транзакцию, либо, если она уже запущена, ничего не делать.Наверное можно безусловно делать BEGIN, ошибки это вызвать не должно. Issuing BEGIN when already inside a transaction block will provoke a warning message. The state of the transaction is not affected. pamirPS. Вообще-то понятно, что транзакциями будет управлять приложение, но все равно было бы удобно увидеть - начата ли транзакция. Приложение - скрипты PHP. Вызываемая функция может не знать, что наколбасила вызывающая.Вроде бы это задача вызывающей функции (или приложения) открывать и закрывать транзакции. Мы в основном работаем с базой из перла через модуль (обертку DBI) в котором connect делается с параметром AutoCommit=>0. То есть постгресовый режим AutoCommit не используем, а работа происходит а-ля оракл. Вызываем DBI::do("insert..."), DBI::do("..."), DBI::commit(), при этом последовательно вызываются постгресовые команды COMMIT, BEGIN, то есть закрывается текущая транзакция и открывается новая. Может быть аналогично можно сделать в ПХП. pamirА взывающая после отработки вызываемой хотела бы знать - коммититься или ничего не было.Это уже совсем другой вопрос. Как из функции вернуть статус? (Если я правильно понимаю.) Это по-моему много обсуждалось на форуме. (Я с функциями почти не сталкивался.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 22:45 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatпри этом последовательно вызываются постгресовые команды COMMIT, BEGIN, то есть закрывается текущая транзакция и открывается новая Интересная мысль - получаем как в оракле - всегда есть начатая транзакция. Удобно. Что об этом скажут гуру Постргеса? Это нормальная практика? Я бы принял ее на вооружение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 12:16 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
pamir LeXa NalBatпри этом последовательно вызываются постгресовые команды COMMIT, BEGIN, то есть закрывается текущая транзакция и открывается новаяИнтересная мысль - получаем как в оракле - всегда есть начатая транзакция.Да, именно так. Причем это обеспечивает перловый модуль DBI, вместе с DBD::Pg. (При флажке DBI::AutoCommit=0.) P.S.: Мы тоже с оракла переехали на постгрес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 14:25 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat P.S.: Мы тоже с оракла переехали на постгрес. А я не переезжаю :) Я работаю на оракле, а постгрес изучаю для себя, для души. Как и PHP :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 14:42 |
|
||
|
Можно как-то узнать, что транзакция была начата словом begin?
|
|||
|---|---|---|---|
|
#18+
1. По поводу состояния транзакции: в libpq есть функция PQtransactionStatus , есть ли связка к ней из PHP - ахез. (imho) 2. по поводу для души - PostgreSQL rules, PHP sucks, Ruby is better! :) (тяпничный йуморъ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2006, 16:39 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33695949&tid=2006438]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
50ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 264ms |
| total: | 376ms |

| 0 / 0 |
