
Demuz
06.10.2018
07:25:41
Доброго времени суток всем! Подскажите пожалуйста, почему pg_dump и pg_dumpall делает только дамп структуры, но не данные, которые находятся в бд?

Anton [Mgn, az09@osm]
06.10.2018
07:26:13

Demuz
06.10.2018
07:27:04

Anton [Mgn, az09@osm]
06.10.2018
07:29:40
>$SCHEMA_ONLY_QUERY

Google

Demuz
06.10.2018
07:31:15

Айтуар
06.10.2018
07:31:23

Demuz
06.10.2018
07:31:47

Айтуар
06.10.2018
07:31:52
А в случае если сделано в сессии не нужно

Demuz
06.10.2018
07:32:49
Разве нельзя просто сделать дамп базы со структурой данных?
>$SCHEMA_ONLY_QUERY
там внутри скорей всего эта ошибка выходит, поскажите, что она означает? pg_dumpall: query failed: ERROR: permission denied for relation pg_authid

Anton [Mgn, az09@osm]
06.10.2018
07:35:07

Айтуар
06.10.2018
07:36:10

Terminator
06.10.2018
07:52:35
@AntonBychkovski будет жить. Поприветствуем!

Yaroslav
06.10.2018
09:36:35

Demuz
06.10.2018
09:38:04
Привык к мускулу

Yaroslav
06.10.2018
09:39:15

Google

Demuz
06.10.2018
09:40:53
Дамп? Я большую базу хотел с сервера на сервер перенести, между серверами скорость большая была, по этому, это было быстрей, чем дамп через свой комп и программу.

Yaroslav
06.10.2018
09:43:00
запрос самый простой(:
SELECT ST_AsBinary("way") AS geom,"name","name:en", place AS "type", z_order, population
FROM planet_osm_point
WHERE place in ('country', 'state', 'city', 'town', 'village', 'hamlet', 'suburb', 'neighbourhood', 'locality')
and "way" && ST_SetSRID('BOX3D(624935 5011821, 1889525 6266615)'::box3d, 3857) ORDER BY population DESC NULLS LAST;
Ну и? C виду, всё нормально, нет?

Anton [Mgn, az09@osm]
06.10.2018
09:50:07

Yaroslav
06.10.2018
09:50:41

Anton [Mgn, az09@osm]
06.10.2018
09:51:02
13 секунд точно не нормально ящитаю

Yaroslav
06.10.2018
09:52:22
13 секунд точно не нормально ящитаю
Эээ... а причём тут это? Row estimations соответствуют, какие у Вас cost-ы — Вам виднее, время выполнения на 100% кэшированных данных, вообще говоря, не имеет отношения ни к чему.
13 секунд точно не нормально ящитаю
Вот только на это можно посмотреть, наверное:
> Rows Removed by Filter: 179633
Добавить это поле в индекс, может быть (с помощью btree_gist)?
Или Вы видите ещё какие проблемы?
о жесть там какая...
Ни...чего себе! Я только что прочитал продолжение (а как невинно всё начиналось). :(

many-faced
06.10.2018
14:58:40
Всем привет! помогите плз сообразить,
как мне добавить два CHECK constraint на то, что p1 и p2 = 0 если g = 0;
и что p1 и p2 != 0 если g != 0?
Таблица такая:
CREATE TABLE table1 (
id serial PRIMARY KEY,
p1 bigint,
p2 bigint,
g bigint
);
Вот так будет нормально?
CREATE TABLE table1 (
id serial PRIMARY KEY,
p1 bigint ,
p2 bigint,
g bigint CHECK((g=0 AND p1=0 AND p2=0)OR(g<>0 AND p1<>0 AND p2<>0))
);

Vladislav
06.10.2018
15:18:49

many-faced
06.10.2018
15:19:29
То, что я написал - работает, но есть подозрение, что есть более правильный способ решения задачи.

Yaroslav
06.10.2018
16:02:10
То, что я написал - работает, но есть подозрение, что есть более правильный способ решения задачи.
Да главное, чтобы понятно было, IMHO.
А то можно и докатиться до:
WITH v(v) AS (
VALUES (0), (1)
), vals AS (
SELECT p1.v AS p1, p2.v AS p2, g.v AS g
FROM v AS p1, v AS p2, v AS g
)
SELECT *, (g=0 AND p1=0 AND p2=0) OR (g<>0 AND p1<>0 AND p2<>0) AS ok,
(p1=0) = (p2=0) AND (p2=0) = (g=0) AS bad,
num_nulls(NULLIF(g, 0), NULLIF(p1, 0), NULLIF(p2, 0)) IN (0, 3) AS crazy
FROM vals
;)

many-faced
06.10.2018
16:30:17
Да главное, чтобы понятно было, IMHO.
А то можно и докатиться до:
WITH v(v) AS (
VALUES (0), (1)
), vals AS (
SELECT p1.v AS p1, p2.v AS p2, g.v AS g
FROM v AS p1, v AS p2, v AS g
)
SELECT *, (g=0 AND p1=0 AND p2=0) OR (g<>0 AND p1<>0 AND p2<>0) AS ok,
(p1=0) = (p2=0) AND (p2=0) = (g=0) AS bad,
num_nulls(NULLIF(g, 0), NULLIF(p1, 0), NULLIF(p2, 0)) IN (0, 3) AS crazy
FROM vals
;)
Адъ

Terminator
06.10.2018
16:37:41
Anonymous будет жить. Поприветствуем!
Vladislav Aleksandrov будет жить. Поприветствуем!

Anton [Mgn, az09@osm]
06.10.2018
17:55:44
https://explain.depesz.com/s/NNVh
это уже терпимо для этого железа

Google

Yaroslav
06.10.2018
18:03:10

Anton [Mgn, az09@osm]
06.10.2018
18:08:23

Yaroslav
06.10.2018
18:11:45
Scaleway VC1L по 9.99 парижских евро
в костах извините не разбираюсь ) секскан исчез — я рад!
> в костах извините не разбираюсь
А зря. ;)
> секскан исчез — я рад!
Вот мне и интересно — чему? При реальной нагрузке этот план может быть в самом деле медленее, чем seqscan.
Как я уже писал, по одному тесту на кешированных данных нельзя делать никаких выводов, в общем случае.
Впрочем, если у Вас в самом деле 100% базы (почти) всегда в RAM, то можно, но это значит, что random_page_cost / cpu_tuple_cost у Вас настроены неверно.

Anton [Mgn, az09@osm]
06.10.2018
18:14:43
этот "сервер" не для реальной нагрузки. база 65Гб, озу 8, настройки наверняка не оптимальны. но точить топор некогда, надо рубить ))

Yaroslav
06.10.2018
18:17:11

Anton [Mgn, az09@osm]
06.10.2018
18:19:56

Yaroslav
06.10.2018
18:21:06

Anton [Mgn, az09@osm]
06.10.2018
18:23:06
"рублю" стиль для тайл-карты, постоянно приходится чистить кеш тайлов и рестартовать апач (долго объяснять)
да, там я один сижу. запросы действительно примерно одинаковые: для каждого слоя геоданных свой запрос, меняется по сути только ббокс.

Yaroslav
06.10.2018
18:27:43

Anton [Mgn, az09@osm]
06.10.2018
18:28:49
Задаёт приблизительную стоимость обработки каждой строки при выполнении запроса. Значение по умолчанию — 0.01.
не понимаю, что за стоимость обработки одной строки
т.е. cpu_tuple_cost скажет, что стоимость выросла в 10 раз. и что тогда?

Yaroslav
06.10.2018
18:31:34
в 10 или даже 20 раз!? пойду ка почитаю тогда
Да, а почему бы нет? Если всё закешировано, значит отностительная стоимость (к seq_page_cost) обработки в памяти, наоборот, становится выше.
А такие значения я тоже взял не с потолка — многие, у кого RAM-only workloads (ну или близко к тому) говорят, что это +-адекватно.

Anton [Mgn, az09@osm]
06.10.2018
18:34:35
но на 32 гига я не зарабатываю этой работкой )
вот бы кто визуализировал взаимозависимость констант стоимости планировщика *_cost


Yaroslav
06.10.2018
18:38:54
т.е. cpu_tuple_cost скажет, что стоимость выросла в 10 раз. и что тогда?
Т.е. соответственно планы, которые состоят в обработке/фильтрации (выкидывании) большого количества tuples, "штрафуются".
Т.е. по-умолчанию для планировщика использование индекса — это "сразу мало, но дорого выбрать", а seqscan — "много, но дёшево выбрать, но быстро отбросить."
Увеличение cpu_tuple_cost намекает планировщику, что отбрасывать — медленно. ;)


Anton [Mgn, az09@osm]
06.10.2018
18:38:57
18.7.2. Константы стоимости для планировщика
Переменные стоимости, описанные в данном разделе, задаются по произвольной шкале. Значение имеют только их отношения, поэтому умножение или деление всех переменных на один коэффициент никак не повлияет на выбор планировщика. По умолчанию эти переменные определяются относительно стоимости чтения последовательной страницы: то есть, переменную seq_page_cost удобно задать равной 1.0, а все другие переменные стоимости определить относительно неё. Но при желании можно использовать и другую шкалу, например, выразить в миллисекундах фактическое время выполнения запросов на конкретной машине.

Yaroslav
06.10.2018
18:41:56

Google

Anton [Mgn, az09@osm]
06.10.2018
18:46:12
в общем алгоритм нащупывания костов для конкретной задачи на конкретном железе видится мне не очень сложным. сначала с разными крайними значениями получаем планы трех (например) вариантов, и уже дело техники их сравнить и прийти к определенным выводам. но боюсь подобную заточку инструмента делают для конференций каких-нибудь или для статьи на хабр )

Yaroslav
06.10.2018
18:49:48
> в общем алгоритм нащупывания костов для конкретной задачи на конкретном железе видится мне не очень сложным.
Да если бы. Это же не от железа зависит, в основном.
Как пример, если у Вас размер базы << RAM, правильное значение random_page_cost — это 1.0, и вообще неважно, какие у Вас диски!
> сначала с разными крайними значениями получаем планы трех (например) вариантов, и уже дело техники их сравнить и прийти к определенным выводам.
И тут же "влезают" shared_buffers и кэш файловой системы, и полностью искажают все расчёты. :(

Darafei
06.10.2018
18:51:57

Yaroslav
06.10.2018
18:55:37

Darafei
06.10.2018
18:56:59
Ну в случае постгиса вообще беда в том, что в оценку никак не включается О() самой функции

Yaroslav
06.10.2018
18:58:44

Darafei
06.10.2018
18:59:10
Да
Там джоин а к б или б к а легко могут в сотни раз по времени отличаться

Yaroslav
06.10.2018
19:00:51
Да
Хмм... и как разработчики postgis это решают?

Terminator
06.10.2018
19:17:13
@Electronik777 будет жить. Поприветствуем!

Kirill
06.10.2018
19:52:11
Добрый вечер. Подскажите, а если удаляется колонка в таблице, то выполняется ли на низком уровне перестроение кортежей таблицы?
В смысле будет ли скопировано содержимое таблицы, но без указанной колонки.

Айтуар
06.10.2018
20:06:29

Darafei
06.10.2018
20:09:52

Kirill
06.10.2018
20:10:41

Jack
07.10.2018
07:57:32
всем привет. у меня в таблице такая структура
user | tag
—————
user1 : tag1
user1: tag2
user2: tag1
мне надо делать query так, чтобы я получил всех юзеров у которых есть и tag1 и tag2. по сути в данном примере только user1. как можно это делать?

Anton [Mgn, az09@osm]
07.10.2018
08:05:44

Jack
07.10.2018
08:07:04
подзапросом в in
IN вроде дает если есть хоть один из этих. то есть у user2 дает. а мне надо именно только User1, Ибо только у него и tag1 и tag2

Anton [Mgn, az09@osm]
07.10.2018
08:07:04
хм, а задачка веселее чем кажется на первый взгляд

Alexey
07.10.2018
08:07:56

Google

Jack
07.10.2018
08:08:35
спасибо, щас попробую оба

Anton [Mgn, az09@osm]
07.10.2018
08:16:48

Alexey
07.10.2018
08:17:31
Или то, что читает твои мысли

Anton [Mgn, az09@osm]
07.10.2018
08:18:40
Но может быть я неправильно понял что автор имел в виду))

Jack
07.10.2018
08:19:51