@pgsql

Страница 482 из 1062
Dima
18.09.2017
09:51:30


Alex
18.09.2017
09:53:41
вы из консоли неправильно к базе подключаетесь, надо с указанием юзера, а если для него нет одноимённой бд, то и базу тоже как-то так: psql -U postgres -d postgres

Dima
18.09.2017
09:54:37


Alex
18.09.2017
09:55:34
pg_ctl вам не нужен, так как есть возможности запуска повыше уровнем: вебконсоль, либо bat-скрипт, который лежит в C:\PostgreSQL

Google
Alex
18.09.2017
09:56:10
чтобы убрать предупреждение надо перед запуском psql в консоли выполнить chcp 1251

Alex
18.09.2017
09:57:33
ок, рад помочь

Che
18.09.2017
10:02:28
select * медленнее чем select ab,c,?

Darafei
18.09.2017
10:04:15
смотря из каких джоинов колонки надо вытягивать и сможет ли это соптимизировать планировщик

но иногда да, и в целом лучше тащить минимум

Andrey
18.09.2017
10:07:52
select * медленнее чем select ab,c,?
Выбор только нужных столбцов может помочь оптимизатору использовать такие штуки, как index only scan и semi-join, например.

Che
18.09.2017
10:09:00
Выбор только нужных столбцов может помочь оптимизатору использовать такие штуки, как index only scan и semi-join, например.
нет, я в том смысле, что a,b,c - это все колонки, которые перечисленны. смысл тот же, что у *, но говорят что * использовать не кошерно

в смысле не какие-то отдельные колонки, а вообще все, просто всместо * я их перечисляю в запросе

Andrey
18.09.2017
10:10:20
Добавите потом столбец и запрос в хранимке сломается.

Che
18.09.2017
10:10:53
ну вот, некошегно. все говорят некошегно. но почему?

Google
Mike Chuguniy
18.09.2017
10:10:58
select * from table - это БОЛЬ при изменении структуры БД и кода проекта

Darafei
18.09.2017
10:11:29
select * from table1 union all select * from table2 при изменении схемы любой из таблиц поедет

Mike Chuguniy
18.09.2017
10:11:34
В консоли select * - вполне себе. В коде проекта не надо так делать. Были у меня преценденты.

Igor
18.09.2017
10:11:39
insert into () select * from тоже редкая боль когда добавляется столбец в таблицу

* на продакшене это зло

Darafei
18.09.2017
10:12:01
и не дай боже количество колонок совпадёт, а типы будут совместимы - это ещё и не заметите

Che
18.09.2017
10:12:03
вот теперь понятно. спасибо)

Mike Chuguniy
18.09.2017
10:12:13
@Komzpa у меня были проблемы при отработке процедуры отката на предыдущий релиз.

и не дай боже количество колонок совпадёт, а типы будут совместимы - это ещё и не заметите
Уууххх! Вот на такие приключения нарываться не приходилось - Бог миловал. Но зарубку на память надо сделать.

Darafei
18.09.2017
10:13:37
у меня с csv формата lon, lat, heading, accuracy, ... - сплошь и рядом :)

Alexander
18.09.2017
10:41:46
Есть таблица (id serial primary key, ctime timestamp default current_timestamp, rate numeric) Нужно найти среднee значение rate за час с момента последнего ctime. Есть ли вариант лучше? select avg(rate) from table where ctime + interval '1 hour' > ( select ctime from table order by id desc limit 1 )

Alexander
18.09.2017
10:53:30
Да вот что-то c оконными функциями лучше не придумывается

Sergey
18.09.2017
10:55:24
А, нужна одна строчка!

Alexander
18.09.2017
10:57:02
Поделитесь?

Sergey
18.09.2017
10:59:55
Возможно select max(ctime) будет лучше чем order by limit 1

И если есть индекс по ctime лучше + interval '1hour' перенести вправо как - interval '1hour'

Alexander
18.09.2017
11:03:00
нет, индекса нет по ctime. есть по id.

Dmitry
18.09.2017
11:27:16
> Нужно найти среднee значение rate за час с момента последнего ctime. Непонятное условие. Если у вас ctime последний, он же максимальный, то условие "строго блоьше" where ctime + interval '1 hour' > ( select ctime from table order by id desc limit 1 ) должно дать пустое множество. Может всё же нужны записи за час до макс. ctime?

Alexander
18.09.2017
11:30:59
ctime последний = максимальный, да. нужны записи за час до макс. ctime, да “должно дать пустое множество” - почему?

Google
Dmitry
18.09.2017
11:38:26
А не. Всё ок. Я бы написал ctime > max(ctime) -1 . Тоже самое.

Индекс по ctime всё же не помешал бы

Alexander
18.09.2017
11:42:36
У меня это c переменной в процедуре. var.start := (select ctime - interval '1 hour' from table order by id desc limit 1); И второй селект c where ctime > start

Dmitry
18.09.2017
11:51:42
А такой вариант: with (select max(ctime) max_ct from table) ct select avg(rate) from table where ctime between ct.max_ct and ct.max_ct - interval '1 hour'

Dima
18.09.2017
11:54:31


Maksim
18.09.2017
11:55:01
кодировка в консоли и внутреняя не совпадают

\l покажи

Dima
18.09.2017
11:56:50
Maksim
18.09.2017
11:57:37
в настройках консоли поколупайся

Mikhail
18.09.2017
11:59:15
кажется примерно так меняется: https://www.postgresql.org/message-id/540740644E9D4387ADE20C63A12BB726%40HIRO57887DE653

Maksim
18.09.2017
12:02:21
о, тоже вариант

Dima
18.09.2017
12:11:28
я создал роль rt через GUI, зашел в psql там через \password rt установил парль на этого пользователя. А как мне теперь проверить этот пароль?

Sergey
18.09.2017
12:12:19
psql -U rt -d postgres

Maksim
18.09.2017
12:12:58
не факт что он в pg_hba появился

Dima
18.09.2017
12:15:54
psql -U rt -d postgres
вошел не спрашивая пароля

Sergey
18.09.2017
12:16:58
вошел не спрашивая пароля
Значит локальных пользователей он пускает без пароля. Давайте попробуем через сеть psql -U rt -d postgres -h localhost

Но, как сказали выше, надо посмотреть что написано в pg_hba.conf и там разрешить доступ нужных пользователей к нужным базам с нужных адресов.

Google
Dima
18.09.2017
12:19:02
прописал все в конфигах рейлс



почему он от моего имени тыкается

Maksim
18.09.2017
12:20:55
надо смотреть, там есть хитрость в виде ident

Dmitry
18.09.2017
12:21:41
А в pg_hba.conf что? Кроме коментов :)

Dima
18.09.2017
12:21:46
надо смотреть, там есть хитрость в виде ident
Там была ошибка потому что он создавал и для девелопера и для тестера базу данных

pg_hba.conf - поменял вс на на passwrod заработало

теперь при psql -U rt -d postgres спрашивает пароль

Maksim
18.09.2017
12:30:15
вводи тот что при установке был

Dima
18.09.2017
12:32:05
Alexander
18.09.2017
12:59:08
Ребята, есть таблица с полем my_table(id bigserial, expiration_time TIMESTAMP). Делаю запрос: SELECT * FROM my_table WHERE expiration_time > CURRENT_TIMESTAMP; У всех сущностей значение поля expiration_time идентичное. Иногда порядок записей по id меняется, т.е. обычно это% 1, 2, 3, а порой: 1, 3, 2 например. Это обусловлено тем, что PostgreSQL не дает гарантий, в каком порядке вернутся записи?

Mike Chuguniy
18.09.2017
12:59:36
да

Для гарантированного порядка надо использовать ORDER BY

Alexander
18.09.2017
13:01:42
Сделал даже забавнее: изменил expiration_time согласно росту id, порядок вовсе стал почти случайным: 2, 3, 1

Ладно, спасибо всем. Буду знать ?

Причем если обновить какую-то строку (там есть и другие неважные поля, в примере я опустил их) -- она выскакивает вверх ?

Сергей
18.09.2017
13:04:08
потому что предыдущая стирается а новая на диске в другом месте лежит

Google
Mike Chuguniy
18.09.2017
13:04:39
Не стирается, а помечается, как удалённая.

Сергей
18.09.2017
13:05:07
ну это уже не важно. вакуум ее подчистит в итоге

главное что новая в другом месте

Alexander
18.09.2017
13:05:55
Да, тогда все вполне логично. Насколько я читал, UPDATE на самом деле является INSERT.

Darafei
18.09.2017
13:06:09
там хитрее

Alexander
18.09.2017
13:07:04
Если не ошибаюсь, кстати, это вы скидывали статью на Хабре, где об этом рассказывали.

Mike Chuguniy
18.09.2017
13:07:06
Если мне память не изменяет, тонкости описаны вот здеся: https://postgrespro.ru/education/courses/DBA2

Darafei
18.09.2017
13:07:21
когда таблица длиннее страницы (первая цифра в ctid), то постгрес постарается впихнуть апдейтнутую запись всё ещё в ту же страницу, и вставка будет "в середину"

ну, то есть апдейт мувнет запись, но не прямо в конец

Mike Chuguniy
18.09.2017
13:07:43
Здеся, однако 3. Страницы и версии строк

Darafei
18.09.2017
13:08:06
так что это наблюдение ценное, но в общем случае непредсказуемое

Mike Chuguniy
18.09.2017
13:09:43
Кстати, тут вот сегодня несчастный разработчик страдал. Ему совсем не помешает ознакомиться с базовым курсом: https://postgrespro.ru/education/courses/DBA1

Vadim
18.09.2017
13:14:23
https://m.habrahabr.ru/company/postgrespro/blog/337502/

Fike
18.09.2017
14:44:59
Если подходить с точки зрения теоремы CAP, то stolon про консистентность, patroni про доступность.
Now wait a sec! Не могу же я пройти мимо такой жирной темы. С точки зрения CAP они не являются ни CP, ни AP-системами. C подразумевает, что при записи W1 последующее чтение R2 всегда будет видеть значение W1 или более позднее, т.е. самое свежее; возврат ошибки или устаревшего значения запрещены. Patroni прямо говорит, что даже при синхронном коммите двое могут закоммититься, после чего мастером будет выбран незакоммитившийся, Stolon же в теории мог бы добиться нужного результата, если бы с помощью бэкенда хранения прогонял бы по одному запросу за раз (т.е. установил бы очень диктаторский SERIALIZABLE). Но Stolon тупо проверяет состояние раз в пять секунд, что не помешает закоммитить W1 на нескольких (но не всех) нодах, после чего потерять их, выбрать мастером ноду без W1 и (sic!) не заметить таким образом коммита. A же говорит о том, что запрос рано или поздно закончится и не будет висеть бесконечно в ожидании восстановления сети (кворума) - возможно, ценой возврата неактуального значения (возврат ошибки опять запрещен - P подразумевает, что система работает в условиях разделения сети). Т.к. оба предоставляют просто TCP-прокси к конкретному узлу, при его недоступности никакого результата не будет получено вообще - а значит это и не AP-системы тоже.

Страница 482 из 1062