Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Какой-то глюк psql вместо одной строки выводит все больше и больше с каждым разом. / 7 сообщений из 7, страница 1 из 1
11.10.2019, 12:30
    #39875118
комит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой-то глюк psql вместо одной строки выводит все больше и больше с каждым разом.
Всем привет.


Есть скрипт.

Скрипт создает временные таблицы (on commit drop), затем на основе этих таблиц и постоянных таблиц возвращает выборку.

Если этот же скрипт выполнить в pg_admin он возвращает 1 строку.

Если этот скрипт выполнить в psql он выозвращает сначала 9 потом 16 строк, и с каждым разом строк все больше и больше.


Причем не важно из-под Linux запускаю psql или из-под Win.


Результат с каждым разом все больше и больше.


При этом в pg_admin все как надо - всегда одна строка.







В чем может быть причина этого глюка и как от него избавиться?
...
Рейтинг: 0 / 0
11.10.2019, 13:36
    #39875179
комит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой-то глюк psql вместо одной строки выводит все больше и больше с каждым разом.
Тааааак.


Похоже какие-то проблемы с темповыми таблицами.


Такое впечатление что рни не дропаются при отключении.
...
Рейтинг: 0 / 0
11.10.2019, 13:41
    #39875184
комит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой-то глюк psql вместо одной строки выводит все больше и больше с каждым разом.
Короче, из одной консоли запускаю скрипт.

Он выводил кучу значений.

А когда из другой консоли создал и дропнул такие же таблицы, только не темповые, а постоянные, из первой консоле при выполнении того же скрипта не находит эти же временные таблицы!!!!


Т.е. один и тот же скрипт дает разный результат, если в другой сессии создать и дропнуть таблицы.
...
Рейтинг: 0 / 0
11.10.2019, 13:57
    #39875195
комит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой-то глюк psql вместо одной строки выводит все больше и больше с каждым разом.
Итак, вот этот скрипт:


Код: sql
1.
CREATE LOCAL TEMP TABLE temp_1 (id int)ON COMMIT DROP;   INSERT INTO temp_1 SELECT 1;   SELECT * FROM temp_1;




В pg_admin выполняется нормально.
Возвращает 1.


В psql через параметр -c выполняется нормально.

Код: sql
1.
2.
3.
psql -U postgres -d postgres -t -q -c "CREATE LOCAL TEMP TABLE temp_1 (id int)ON COMMIT DROP;   INSERT INTO temp_1 SELECT 1;   SELECT * FROM temp_1;"

1



Возвращает 1.



НО !!!!!!!
Если запустить его из файла, через -f
Предварительно создав файл:

Код: sql
1.
echo "CREATE LOCAL TEMP TABLE temp_1 (id int)ON COMMIT DROP;   INSERT INTO temp_1 SELECT 1;   SELECT * FROM temp_1;" > test_1.sql





Получается вот такая штуковина:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
psql -U postgres -d postgres -t -q -f test_1.sql

psql:test_1.sql:1: ОШИБКА:  отношение "temp_1" не существует
LINE 1: INSERT INTO temp_1 SELECT 1;
                    ^
psql:test_1.sql:1: ОШИБКА:  отношение "temp_1" не существует
LINE 1: SELECT * FROM temp_1;
                      ^
...
Рейтинг: 0 / 0
11.10.2019, 13:57
    #39875197
комит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой-то глюк psql вместо одной строки выводит все больше и больше с каждым разом.
почему так? о_О
...
Рейтинг: 0 / 0
11.10.2019, 14:01
    #39875201
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой-то глюк psql вместо одной строки выводит все больше и больше с каждым разом.
Видно же, что в одном случае вся пачка выполняется в одной транзакции, в другом - нет.
Беглое гугление выдает:

https://postgrespro.ru/docs/postgresql/9.6/app-psql Каждая строка SQL-команд, заданная ключом -c, передаётся на сервер как один запрос. Поэтому сервер выполняет её в одной транзакции, даже когда эта строка содержит несколько команд SQL, если только в ней не содержатся явные команды BEGIN/COMMIT, разделяющие её на несколько транзакций
...
Рейтинг: 0 / 0
11.10.2019, 14:14
    #39875218
комит
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой-то глюк psql вместо одной строки выводит все больше и больше с каждым разом.
Alexander A. SakВидно же, что в одном случае вся пачка выполняется в одной транзакции, в другом - нет.
Беглое гугление выдает:

https://postgrespro.ru/docs/postgresql/9.6/app-psql Каждая строка SQL-команд, заданная ключом -c, передаётся на сервер как один запрос. Поэтому сервер выполняет её в одной транзакции, даже когда эта строка содержит несколько команд SQL, если только в ней не содержатся явные команды BEGIN/COMMIT, разделяющие её на несколько транзакций

Спасибо!

Вы абсолютно правы!


ГазМяс - чемпион!
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Какой-то глюк psql вместо одной строки выводит все больше и больше с каждым разом. / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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