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

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

Код: sql
1.
echo "\\set AUTOCOMMIT off" >> ~/.psqlrc
...
Рейтинг: 0 / 0
07.06.2016, 13:53
    #39251936
Jonhson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
default transaction mode
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
07.06.2016, 13:56
    #39251938
Jonhson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
default transaction mode
виноват, строчными надо, сработало, спасибо!


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

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

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

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

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

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

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



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

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

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

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

Советую также посмотреть на то, как себя ведёт скрипт если где-то посерёдке было исключение.
...
Рейтинг: 0 / 0
07.06.2016, 14:34
    #39251979
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
default transaction mode
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
07.06.2016, 14:35
    #39251981
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
default transaction mode
vyegorovJonhson,

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

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

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

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

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

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

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

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




это схема отражает реалии работы pg?
...
Рейтинг: 0 / 0
07.06.2016, 14:38
    #39251986
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
default transaction mode
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
07.06.2016, 14:40
    #39251990
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
default transaction mode
Jonhson,

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

Более того, сам уже наступал на эти грабли, но забыл: www.postgresql.org/message-id/flat/16634.1413831804@sss.pgh.pa.us
...
Рейтинг: 0 / 0
07.06.2016, 14:55
    #39252011
Jonhson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
default transaction mode
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
07.06.2016, 15:08
    #39252037
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
default transaction mode
JonhsonИнстанс по факту может работать в autocommit для каждого запроса.неожиданный вывод из слов, что автокоммит к "инстансу" отношения не имеет.
Jonhsonнесколько вгоняет в ступор.ожидаемый результат?
...
Рейтинг: 0 / 0
07.06.2016, 15:08
    #39252038
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
default transaction mode
Jonhson,

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

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

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

тип int.

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

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

исключение по крайней мере в одном случаене обязано быть исключение. У sqrt выше стоимость и негарантированно вычисляется после сравнения с литералом. Вычислять второе выражение AND после false/null смысла нет.
...
Рейтинг: 0 / 0
07.06.2016, 15:28
    #39252066
Jonhson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
default transaction mode
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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / default transaction mode / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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