powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / default transaction mode
25 сообщений из 34, страница 1 из 2
default transaction mode
    #39251883
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подскажите, можно ли как-то настроить ини файл, что-бы всегда (идеально) или хотя бы по умолчанию у psql стартовал полноценный транзакционный режим?
...
Рейтинг: 0 / 0
default transaction mode
    #39251888
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhsonподскажите, можно ли как-то настроить ини файл, что-бы всегда (идеально) или хотя бы по умолчанию у psql стартовал полноценный транзакционный режим?
что вы имеете ввиду?
...
Рейтинг: 0 / 0
default transaction mode
    #39251898
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имею ввиду, что-бы пока я не сделал commit; другие сессии не видели моих изменений
...
Рейтинг: 0 / 0
default transaction mode
    #39251899
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
begin transaction;

вроде пишется, а хочется зафорсить
...
Рейтинг: 0 / 0
default transaction mode
    #39251905
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhsonподскажите, можно ли как-то настроить ини файл, что-бы всегда (идеально) или хотя бы по умолчанию у psql стартовал полноценный транзакционный режим?
ф топег приглашается г-н лавров, мастер дипломатических формулировок
...
Рейтинг: 0 / 0
default transaction mode
    #39251912
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhson,

Код: sql
1.
echo "\\set AUTOCOMMIT off" >> ~/.psqlrc
...
Рейтинг: 0 / 0
default transaction mode
    #39251936
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,

на сработало, пробовал
Код: sql
1.
\set autocommit off

и
Код: sql
1.
\\set autocommit off



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
psql db1
psql (9.5.3)
Type "help" for help.

db1=# create table xxx(x int);
CREATE TABLE
db1=# select * from xxx;
 x 
---
(0 rows)

db1=# rollback;
WARNING:  there is no transaction in progress
ROLLBACK
db1=# select * from xxx;
 x 
---
(0 rows)

db1=# \q
MacBook-Air-Nick:p6 skelet$ cat ~/.psqlrc 
\set autocommit off
MacBook-Air-Nick:p6 skelet$ vim ~/.psqlrc 
MacBook-Air-Nick:p6 skelet$ 
MacBook-Air-Nick:p6 skelet$ psql db1
psql:/Users/skelet/.psqlrc:1: invalid command \
psql (9.5.3)
Type "help" for help.

db1=# 
...
Рейтинг: 0 / 0
default transaction mode
    #39251938
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
виноват, строчными надо, сработало, спасибо!


А на уровне инстанса зафорсить транзакционный режим, нельзя, как я понимаю?

типа
Код: sql
1.
alter system set transactional_mode=ON; 
...
Рейтинг: 0 / 0
default transaction mode
    #39251941
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhson,

Он включен всегда на уровне экземпляра — как вы себе представляете ACID СУБД с отключенными транзакциями?
В данном случае — это особенность клиента, а не СУБД.
...
Рейтинг: 0 / 0
default transaction mode
    #39251943
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. в режиме
Код: sql
1.
autocommit off   

клиент ( либы psql) просто не передают инфу инстансу пока не будет commit?

я правильно понял?
...
Рейтинг: 0 / 0
default transaction mode
    #39251976
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhsonт.е. в режиме
Код: sql
1.
autocommit off   

клиент ( либы psql) просто не передают инфу инстансу пока не будет commit?

я правильно понял?думаю нет. думаю он за вас говорит
Код: sql
1.
BEGIN;



когда--то давно был серверный параметр "автокоммит", выпилили.
теперь все клиенты эмулируют его просылкой begin;
...
Рейтинг: 0 / 0
default transaction mode
    #39251978
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhson,

Почему вы так думаете?

Транзакция начинается каждый раз, когда вы даёте запрос базе.

Завершается она либо явно, когда вы напишите COMMIT или же ROLLBACK (== AUTOCOMMIT off),
либо неявно, т.е. клиент за вас посылает COMMIT после кажого запроса (== AUTOCOMMIT on, default).

Советую также посмотреть на то, как себя ведёт скрипт если где-то посерёдке было исключение.
...
Рейтинг: 0 / 0
default transaction mode
    #39251979
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovJonhson,

Почему вы так думаете?

Транзакция начинается каждый раз, когда вы даёте запрос базе.

Завершается она либо явно, когда вы напишите COMMIT или же ROLLBACK (== AUTOCOMMIT off),
либо неявно, т.е. клиент за вас посылает COMMIT после кажого запроса (== AUTOCOMMIT on, default).

Советую также посмотреть на то, как себя ведёт скрипт если где-то посерёдке было исключение.\

Нет ту вы не правы а qwwq прав.
По умолчанию если просто запрос выполнен - он считается сам по себе транзакцией.
И никаких begin/commit от клиента не приходит и не требуется.

И autocommit off на клиенте все что значит это то что клиент автоматом перед первым вашим запросом будет делать begin;
и так же будет делать begin; после того как вы commit;/rollback; сделаете.
Т.е. он просто begin; за вас будет вызывать автоматом.

При этом autocommit off это свойство конкретного клиента (в данном случае мы говорим о psql и только о нем) и на каких то клиентах может нормально не поддерживаться или поддерживаться криво.


--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
default transaction mode
    #39251981
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovJonhson,

Почему вы так думаете?

Транзакция начинается каждый раз, когда вы даёте запрос базе.

Завершается она либо явно, когда вы напишите COMMIT или же ROLLBACK (== AUTOCOMMIT off),
либо неявно, т.е. клиент за вас посылает COMMIT после кажого запроса (== AUTOCOMMIT on, default).

Советую также посмотреть на то, как себя ведёт скрипт если где-то посерёдке было исключение.
выфсёврёти

в режиме "автокоммит он" он просто не шлёт эмулирующего бегина, думается. (включите лог всех стейтментов на сервере, и покажите что я неправ )

хотя могут быть и исключения (т.е. могу врать).
...
Рейтинг: 0 / 0
default transaction mode
    #39251983
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посылка begin transaction это понятно,

но по факту что происходит?

Код: sql
1.
2.
3.
4.
5.
6.
7.
begin transaction;
select... 
insert ...
update ...
select ... 
commit; 
-- и вот тут пересылка изменений инстансу? 




это схема отражает реалии работы pg?
...
Рейтинг: 0 / 0
default transaction mode
    #39251986
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhsonпосылка begin transaction это понятно,

но по факту что происходит?

Код: sql
1.
2.
3.
4.
5.
6.
7.
begin transaction;
select... 
insert ...
update ...
select ... 
commit; 
-- и вот тут пересылка изменений инстансу? 




это схема отражает реалии работы pg?

Нет... каждый запрос отправляется в "instance" в вашей терминологии сразу.
Иначе как можно вообще выполнить запрос не передавая его в базу?

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
default transaction mode
    #39251990
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhson,

откройте руками в другом соединении pg_stat_activity и следите за его состоянием после каждого стейтмента. сразу станет ясно, что все сразу приходит на сервер. без бегина он просто коммитит всё сразу. поскольку автокоммит он -- его единственный режим. других просто нет.
...
Рейтинг: 0 / 0
default transaction mode
    #39251992
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukНет ту вы не правы а qwwq прав.
По умолчанию если просто запрос выполнен - он считается сам по себе транзакцией.
И никаких begin/commit от клиента не приходит и не требуется.
Да, согласен.

Более того, сам уже наступал на эти грабли, но забыл: www.postgresql.org/message-id/flat/16634.1413831804@sss.pgh.pa.us
...
Рейтинг: 0 / 0
default transaction mode
    #39252011
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukJonhsonпосылка begin transaction это понятно,

но по факту что происходит?

Код: sql
1.
2.
3.
4.
5.
6.
7.
begin transaction;
select... 
insert ...
update ...
select ... 
commit; 
-- и вот тут пересылка изменений инстансу? 




это схема отражает реалии работы pg?

Нет... каждый запрос отправляется в "instance" в вашей терминологии сразу.
Иначе как можно вообще выполнить запрос не передавая его в базу?



ок, стало быть 1-е утверждение в 19267088 не верно. Инстанс по факту может работать в autocommit для каждого запроса.

Спасибо.


А можете каким-то образом объяснить это:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
db1=# select * from t1;
 x  
----
  1
 -1
(2 rows)

db1=# select * from t1 where x>0 and sqrt(x) <1;
 x 
---
(0 rows)

db1=# select * from t1 where x>0 and sqrt(x) <2 ;
 x 
---
 1
(1 row)

db1=# select * from t1 where sqrt(x) <2 and x>0;
 x 
---
 1
(1 row)




несколько вгоняет в ступор.
...
Рейтинг: 0 / 0
default transaction mode
    #39252037
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JonhsonИнстанс по факту может работать в autocommit для каждого запроса.неожиданный вывод из слов, что автокоммит к "инстансу" отношения не имеет.
Jonhsonнесколько вгоняет в ступор.ожидаемый результат?
...
Рейтинг: 0 / 0
default transaction mode
    #39252038
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhson,

Целочисленный тип колонки `t1.x`?
...
Рейтинг: 0 / 0
default transaction mode
    #39252043
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p2.Jonhsonнесколько вгоняет в ступор.ожидаемый результат?

исключение по крайней мере в одном случае
...
Рейтинг: 0 / 0
default transaction mode
    #39252045
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovJonhson,

Целочисленный тип колонки `t1.x`?

тип int.

Как тут сделать запрос к
Код: sql
1.
user_tab_columns

что-бы показать, не знаю...
...
Рейтинг: 0 / 0
default transaction mode
    #39252046
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonhsonp2.пропущено...
ожидаемый результат?

исключение по крайней мере в одном случаене обязано быть исключение. У sqrt выше стоимость и негарантированно вычисляется после сравнения с литералом. Вычислять второе выражение AND после false/null смысла нет.
...
Рейтинг: 0 / 0
default transaction mode
    #39252066
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p2.Jonhsonпропущено...


исключение по крайней мере в одном случаене обязано быть исключение. У sqrt выше стоимость и негарантированно вычисляется после сравнения с литералом. Вычислять второе выражение AND после false/null смысла нет.

вот тут подробнее

выражение

Код: sql
1.
( x > 0 ) and ( sqrt(x) < 2 )



что тут первое, что второе?

для лучшего понимания пример на С:

...
Код: plaintext
1.
2.
3.
4.
int x=some_function();
if (x>0 && sqrt(x) < 2.0 ) { 
   ....
}



вычислиться ГАРАНТИРОВАННО корректно, поскольку сначала будет проверено x>0 , и только в случае true вычислен корень.

есть ли какие-то правила на порядок в where ?
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / default transaction mode
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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