
Igor
24.05.2017
06:33:33
Гм, доберусь до компа - попробую

Dmitry
24.05.2017
06:54:59

Darafei
24.05.2017
10:37:37
в тему цветных приглашений - кто-нибудь делал цветные значения в заселекченных таблицах?

Dmitry
24.05.2017
11:30:06
Вот же было

Google

Dmitry
24.05.2017
11:30:32

Alexandr
24.05.2017
11:32:26
Коллеги, проголосуйте за доклады по PstgreSQL плиз https://devconf.ru/ru/offers/Storage

Darafei
24.05.2017
11:40:36
Вот конфиг )
это рамочки. я хочу маленькие значения красить в красный, а большие - в зелёный. как? :)
судя по всему надо патчить psql - https://www.postgresql.org/message-id/CAKFQuwbAEU-HxLJPQN%3DeEXo-jFdskx8KCWhiOz3vmNEB4CWYCQ%40mail.gmail.com

Andrey
24.05.2017
11:44:35
Хотя даже в моём конфиге можно добавить ещё одно условие с регуляркой, чтобы подсвечивать большие значения, хоть это и немного костыльно.
Но у такого подхода есть один недостаток, - если все строки результата запроса помещаются в терминал, пейджер не вызывается :(

Darafei
24.05.2017
11:47:08
понимаешь, следующим шагом хочется рисовать в аски геометрии, как на telnet mapscii.me
потому что постгисовые 0103000020110F00000100000005000000D7A370FD007F474185EB5108A3455B419A9999F9077F4741EC51B8DEA4455B41C3F5289C097F47410AD7A350A3455B41000000A0027F4741A4703D7AA1455B41D7A370FD007F474185EB5108A3455B41 в селектах не очень помогают. и даже координаты в AsText тоже не то что бы читаемы :)

Dmitry
24.05.2017
11:49:22
он на базе prompt toolkit, наверняка можно поменять цвет любого элемента

Andrey
24.05.2017
11:50:43

Google

Alex
24.05.2017
11:54:38
Друзья есть аналог @@rowcount в postgresql ? Хочу проверить если дата записалась успешна, в sql server проверял так :
insert into ...
values ...
if @@rowcount > 0 ...

Darafei
24.05.2017
11:54:57
в plpgsql?

Alex
24.05.2017
11:55:05
да

Darafei
24.05.2017
11:55:09
у тебя есть insert returning в любом раскладе

Alex
24.05.2017
11:55:49
спасибо

Darafei
24.05.2017
11:55:57
ну и
GET DIAGNOSTICS nraffected = ROW_COUNT;
а почему вы решили, что это подходит под PostgreSQL?

nietzschebrod
24.05.2017
13:03:12
все красноглазые на одно лицо

Евгений
24.05.2017
14:25:58
Ребята, добрый вечер! Есть вопрос! На слейвах в последнее время стало высыпаться следующее: <-= SED FAIL: PostgreSQL required checkpoints occurs to frequently on db-slave2 on db-slave2 =->
По настройкам относительно чекпоинтов, выставлен таймаут на 5 мин и 0.7 из этого времени допускается запись на диск, ну и максимальный размер валов накопленных до 1 gb, я так понимаю слишком агрессивный чекпоинт? Таймаут увеличить до 6 мин и пройдет или нужно в глубь копать, кто сталкивался?

Петр
24.05.2017
14:29:39
ну так попробуйте увеличить checkpoint_timeout и max_wal_size
мониторьте и выставьте более-менее приемлимые значения

Kirill
25.05.2017
04:59:25
Может кто искал или реализовывал уже инструмент профилирования производительности хранимых функций с учетом зависимостей. Поделитесь опытом. Очень интересно. Пока обхожусь pg_stat_user_functions, но он не показывает у какой функции какие дочки.

Darafei
25.05.2017
05:06:12
подойдёт? https://bitbucket.org/openscg/plprofiler

Kirill
25.05.2017
05:16:49
Вообще репозиторий у ребят интересный, рекомендую заглянуть. Странно, что раньше на них не натыкался. Спасибо за ссылку @Komzpa

Александр
25.05.2017
06:11:38
Ht,znCgjhbv c xtkjdtrjv
Ребят привет
Спорим с человеком
Говорит что база данных реляционная не может состоять из одной таблицы...

Ilya
25.05.2017
06:13:04
Может.

Google

Denis
25.05.2017
06:13:16
Реляционная - от слова "relations ", что в терминологии SQL означает таблицы

Александр
25.05.2017
06:13:32
Объясни пожалуйста популярно, он прочитал вики, и говорит чято это отношение!

Denis
25.05.2017
06:13:36
Таблица есть - реляционная)

Александр
25.05.2017
06:13:38
Именно внутри между таблицами
А я говорю что нет!
Одна таблица - это и есть уже реляционная БД

Denis
25.05.2017
06:14:16
Короче, ты прав, он нет

Александр
25.05.2017
06:14:23
Спасибо коллеги

Darafei
25.05.2017
06:22:33
является ли реляционной пустая таблица без колонок...

Denis
25.05.2017
06:26:44

Darafei
25.05.2017
06:27:40
ну, как минимум она возникает как промежуточная штука в where exists(select from table)
интересно, как в неё строку вставить
gis=# create table nocolumn ();
CREATE TABLE
gis=# \d+ nocolumn
Table "public.nocolumn"
Column | Type | Modifiers | Storage | Stats target | Description
--------+------+-----------+---------+--------------+-------------
gis=# insert into nocolumn values ();
ERROR: syntax error at or near ")"
LINE 1: insert into nocolumn values ();
^

Denis
25.05.2017
06:30:33

Darafei
25.05.2017
06:33:21
взаправдашние временные таблицы на читающих запросах, кажется, ничто не создаёт
но всегда можно представить себе рефакторинг, в результате которого подзапрос из exists() уедет сначала в CTE, а потом во временную таблицу в отдельный запрос :)

Denis
25.05.2017
06:36:31
Меня заинтересовало, что exists с твоих слов создаёт пустую таблицу:)

Darafei
25.05.2017
06:38:44
ну, запись (select from table) без колонок в select при пустой table синтаксически - подзапрос, возвращающий пустую таблицу без колонок

dmitriy
25.05.2017
06:38:49

Darafei
25.05.2017
06:39:40
а так да, оптимизатор всё перепишет до неузнаваемости :)

dmitriy
25.05.2017
06:39:59
Not exists обычно в Nested loop anti join превращается

Google

dmitriy
25.05.2017
06:41:21
Есть нода materialize, которая появляется с cte обычно, она результат в память копирует

Denis
25.05.2017
06:43:53
Я воспринял историю про where exists именно в духе, что exists создаёт таблицу как файл на файловой системе. Это мне показалось крайне нелогичным, вот и спросил. Очевидно, я не понял @Komzpa

Anatoliy
25.05.2017
06:46:27

Denis
25.05.2017
06:47:05

Admin
ERROR: S client not available


Darafei
25.05.2017
06:52:16
gis=# explain (analyse, verbose, buffers) select 1 where exists(select where false);
QUERY PLAN
--------------------------------------------------------------------------------------------
Result (cost=0.01..0.02 rows=1 width=4) (actual time=0.002..0.002 rows=0 loops=1)
Output: 1
One-Time Filter: $0
InitPlan 1 (returns $0)
-> Result (cost=0.00..0.01 rows=1 width=0) (actual time=0.000..0.000 rows=0 loops=1)
One-Time Filter: false
Planning time: 0.047 ms
Execution time: 0.010 ms
(8 rows)
интересно, что exists() от таблицы с 0 строками всё ещё планирует скан по ней
gis=# explain (analyse, verbose, buffers) select 1 from nocolumn where exists(select from nocolumn where false);
QUERY PLAN
--------------------------------------------------------------------------------------------
Result (cost=0.00..39.10 rows=2910 width=4) (actual time=0.001..0.001 rows=0 loops=1)
Output: 1
One-Time Filter: $0
InitPlan 1 (returns $0)
-> Result (cost=0.00..0.00 rows=0 width=0) (actual time=0.000..0.000 rows=0 loops=1)
One-Time Filter: false
-> Seq Scan on public.nocolumn (cost=0.00..39.10 rows=2910 width=4) (never executed)
Output: 1
Planning time: 0.042 ms
Execution time: 0.016 ms
(10 rows)
но если намекнуть ему, что там можно сделать join, то попытки скана уходят:
gis=# explain (analyse, verbose, buffers) select 1 from nocolumn a where exists(select from nocolumn b where false and a.ctid=b.ctid);
QUERY PLAN
------------------------------------------------------------------------------------
Result (cost=0.00..0.00 rows=0 width=4) (actual time=0.001..0.001 rows=0 loops=1)
Output: 1
One-Time Filter: false
Planning time: 0.034 ms
Execution time: 0.009 ms
(5 rows)
получается, постгрес никогда не распишет exists в самоуничтожающийся cross join, если нет связующих полей c чем-то снаружи подзапроса?
set enable_seqscan to off; не делает на первом запросе второй план


Denis
25.05.2017
07:04:26
Ну по идее exists проверяет, возвращает ли подзапрос Хотя бы одну строку. Если соединение идёт по несуществующим столбцам, то очевидно хитрый постгрес даже не считает нужным что-то считывать и просто понимает, что там пусто

Darafei
25.05.2017
07:05:22
но про select where false он тоже знает, что там rows=0
столбец-то как раз существующий :)
ctid у всего, что на диске лежит в таблицах, есть

Denis
25.05.2017
07:08:46
Можно открыть исходники планировщика и попробовать не сойти с ума)

Ildar
25.05.2017
07:09:55
Одна таблица - это и есть уже реляционная БД
я думаю, что правильнее говорить реляционная СУБД, т.е. такая, что реализует реляционную алгебру. Таблица в бд - это частный случай отношения. Это может быть, например, результат выполнения функции, другого подзапроса и др. Вот запрос, использующий реляционную алгебру без единой таблицы:
select * from (values (1,2)) as x(a,b) join (select generate_series(1,5)) as y(c) on x.a = y.c;

Александр
25.05.2017
07:10:54
я думаю, что правильнее говорить реляционная СУБД, т.е. такая, что реализует реляционную алгебру. Таблица в бд - это частный случай отношения. Это может быть, например, результат выполнения функции, другого подзапроса и др. Вот запрос, использующий реляционную алгебру без единой таблицы:
select * from (values (1,2)) as x(a,b) join (select generate_series(1,5)) as y(c) on x.a = y.c;
Спасибо за столь исчерпывающий ответ!

raksita
25.05.2017
08:36:06

Darafei
25.05.2017
08:46:40

Google

raksita
25.05.2017
08:47:28

Darafei
25.05.2017
08:47:59
но в синтаксисе values, получается, пустого тапла не бывает?

raksita
25.05.2017
08:58:05
получается, что так
вырожденный SELECT существует, а VALUES нет

Denis
25.05.2017
09:01:17
А есть ли возможность вывести просто пустую строку? Ведь values просто последовательность строк "(1), (2)" превращает в таблицу. Может проблема не в values, а в том, что нельзя создать пустую строку через "()"?

raksita
25.05.2017
09:05:18
да, скорее всего, так
кортеж без полей можно выразить только через SELECT

Denis
25.05.2017
09:26:10
Я далеко от компьютера, можете проверить values jsonb_populate_record(null::nocolumn, '{}') ?

Айтуар
25.05.2017
09:27:18
А БД не упадёт? ?

Denis
25.05.2017
09:29:13

raksita
25.05.2017
09:32:36

Denis
25.05.2017
09:33:59

raksita
25.05.2017
09:34:28
нет, нельзя

Denis
25.05.2017
09:35:03