
Аггей
12.08.2017
05:22:44
Бывали "подвисания" при которых интерфейс не отзывался до перезакрытия страницы (создания новой сессии)
В чате тут есть с 10ок моих бывших колег - если займетесь рефакторингом - думаю они накидают проблем

Mike Chuguniy
12.08.2017
05:30:07
Да уж... "Свежак" свежачный - 14.04.2013
Вероятность того, что не взлетит на свежем пыхпых-е весьма высока.

Google

Yuriy
13.08.2017
04:37:45
о/

Mike Chuguniy
13.08.2017
05:00:04
Всё уже украдено до нас: https://github.com/j2s/phppgadmin
Ну и ваще поиск по гитхабу выдаёт ссылок вагон и маленькую тележку.


Konstantin
13.08.2017
20:16:36
выжимка с сайта по грядущему postgresql 10:
* Rename write-ahead log directory pg_xlog to pg_wal, and rename transaction status directory pg_clog to pg_xact (Michael Paquier):
Users have occasionally thought that these directories contained only inessential log files, and proceeded to remove write-ahead log files or transaction status files manually, causing irrecoverable data loss. These name changes are intended to discourage such errors in future.
* Rename SQL functions, tools, and options that reference “xlog” to “wal” (Robert Haas):
For example, pg_switch_xlog() becomes pg_switch_wal(), pg_receivexlog becomes pg_receivewal, and —xlogdir becomes —waldir. This is for consistency with the change of the pg_xlog directory name; in general, the “xlog” terminology is no longer used in any user-facing places.
— давно пора, а то столько прохладных побасенок в интернетах ходит "удалил pg_xlog, база чота не отвечает"
* Increase the size of the default DH parameters used for OpenSSL ephemeral DH ciphers to 2048 bits (Heikki Linnakangas):
The size of the compiled-in DH parameters has been increased from 1024 to 2048 bits, making DH key exchange more resistant to brute-force attacks. However, some old SSL implementations, notably some revisions of Java Runtime Environment version 6, will not accept DH parameters longer than 1024 bits, and hence will not be able to connect over SSL. If it's necessary to support such old clients, you can use custom 1024-bit DH parameters instead of the compiled-in defaults. See ssl_dh_params_file.
— и это тоже давно пора сделать
* Hash indexes must be rebuilt after pg_upgrade-ing from any previous major PostgreSQL version (Mithun Cy, Robert Haas):
Major hash index improvements necessitated this requirement. pg_upgrade will create a script to assist with this.
— проверял референс create index для dev-версии, теперь индексы по hash будут несколько более юзабельны (по крайней мере, обещают быть таковыми)
камрады, ждём 10ку?


Александр
14.08.2017
00:33:25
Здравствуйте, может кто-то помочь решить задачу по PosgreSQL?

Yuriy
14.08.2017
00:54:52

Subb98
14.08.2017
04:41:16
Привет. Есть ли способ отобразить все связи определённого столбца с другими столбцами в БД?
Чтобы принять решение об изменении таблицы, нужно узнать, насколько конкретный столбец будет безопасно затрагивать.

Рома
14.08.2017
04:46:28

Subb98
14.08.2017
04:48:05

Artyem
14.08.2017
07:00:03


Александр
14.08.2017
08:43:45
пробовал такое
select
(
select concat(actor.first_name, ' ', actor.last_name)
from actor
join film_actor on film_actor.actor_id = actor.actor_id
join film on film_actor.film_id = film.film_id
group by film.title, actor.actor_id, actor.first_name, actor.last_name
order by actor.actor_id
limit 1
) as first_actor,
(
select concat(actor.first_name, ' ', actor.last_name)
from actor
join film_actor on film_actor.actor_id = actor.actor_id
join film on film_actor.film_id = film.film_id
group by film.title, actor.actor_id, actor.first_name, actor.last_name
order by actor.actor_id
limit 1
offset 1
) as second_actor,
film.title
from film
но выдает только для одного фильма, не знаю как сделать линк


Ildar
14.08.2017
09:25:22
пробовал такое
select
(
select concat(actor.first_name, ' ', actor.last_name)
from actor
join film_actor on film_actor.actor_id = actor.actor_id
join film on film_actor.film_id = film.film_id
group by film.title, actor.actor_id, actor.first_name, actor.last_name
order by actor.actor_id
limit 1
) as first_actor,
(
select concat(actor.first_name, ' ', actor.last_name)
from actor
join film_actor on film_actor.actor_id = actor.actor_id
join film on film_actor.film_id = film.film_id
group by film.title, actor.actor_id, actor.first_name, actor.last_name
order by actor.actor_id
limit 1
offset 1
) as second_actor,
film.title
from film
но выдает только для одного фильма, не знаю как сделать линк
как-нибудь так:
with film_actors_subquery as (
select array_agg(имя актера) as actors_names, film_id
from ... group by film_id)
select fa.actors_names[0], fa.actors_names[1], f.title
from film f
join film_actors_subquery fa on fa.film_id = f.film_id;
(еще неплохо бы длину массива проверять)


ele
14.08.2017
09:43:59
Всем привет. Помогите пожалуйсто
Как востановить удалённые таблицы с wal логов ?
Ситуация такова что sql бекапа нет.

Google

Roman
14.08.2017
09:46:48
привет
у меня есть таблица с одним полем, которое является уникальным индексом.
как мне добавить в него выборку значений, чтобы ошибки добавления уже существующих записей игнорировалось?

Vadim
14.08.2017
09:54:45

Andrey
14.08.2017
09:57:32

Roman
14.08.2017
09:58:23

Рома
14.08.2017
10:05:33
Кстати насчет UPSERT'а, это ведь реализуется как INSERT INTO ... ON CONFLICT ...
Есть ли возможность или может будет в 10-ке возвращать из такого запроса id ничего не апдейтя?
Если нет - вставить и вернуть id, если есть - вернуть id
я делал так:
INSERT INTO table(columns) VALUES (values) ON CONFLICT (columns) DO UPDATE SET id = table.id RETURNING id


Александр
14.08.2017
11:19:27
with film_actors_subquery as (
select array_agg(concat(actor.first_name, ' ', actor.last_name)) as actors_names, film_actor.film_id
from actor
join film_actor on film_actor.actor_id = actor.actor_id
group by film_actor.film_id
)
select film_actors_subquery.actors_names[1] as first_actor, film_actors_subquery.actors_names[2] as second_actor, film.title
from film
join film_actors_subquery on film_actors_subquery.film_id = film.film_id;
Перечитал условия задачи, понял что не то делаю. Мне нудно по сути аггрегировать всех актеров в массив по каждому фильму, а потом как-то найти часто пересекающийся вместе. Например
select array_agg(actor_id) as actors, film_id
from film_actor
group by film_actor.film_id
order by film_id
выдаст (CSV)
"actors","film_id"
"{1,2,3}",1
"{4,5,6}",2
"{7,8,9}",3
"{8,10}",4
"{10,11,12,13,14}",5
"{10,12,13,14}",6
"{10,12,13,14}",7
а мне нужно получить такое (чаще всего вместе присутствуют в одном масиве)
"{10,12,13,14}",5
"{10,12,13,14}",6
"{10,12,13,14}",7


Yura
14.08.2017
12:50:25
select act1.first_name||' '||act1.last_name as first_actor,
act2.first_name||' '||act2.last_name as last_name, film.title
from (select fa1.actor_id as aid1,
fa2.actor_id as aid2,
array_agg(film_id) as film_ids
from film_actor as fa1
join film_actor as fa2 using (film_id)
where fa1.actor_id < fa2.actor_id
group by 1, 2
order by array_length(film_ids, 1) desc
limit 1) as most_wanted
join actor as act1 on aid1 = act1.actor_id
join actor as act2 on aid2 = act2.actor_id
join film on film.film_id = ANY(film_ids);
Не запускал, правда.

ildus
14.08.2017
12:51:57

Alex
14.08.2017
12:52:49
что писалось с трудом, должно пониматься с трудом :)

Yura
14.08.2017
12:53:13
Так лучше?

Konstantin
14.08.2017
12:54:49

Рома
14.08.2017
12:57:22
По-моему, получение массива и film_id ведет в тупик
Я бы начал так:
SELECT ARRAY[actors.actor_id, second_actors.actor_id] as arr, films.film_id
FROM actors
INNER JOIN actors second_actors USING film_id -- точно не помню синтаксис USING
теперь есть результат с [первым актерем, вторым] и фильм
группируем по массиву, считаем фильмы, сортируем по фильмам и как-то так задача решена
в конце я пришел к тому, о чем написал в начале ?

Yura
14.08.2017
14:05:18
Но ты не исходную задачу решил.

Svyatoslav
14.08.2017
14:20:58
Коллеги, какие тулзы используете для аналитики и визуализации данных из pgsql?

Google

Vadim
14.08.2017
14:25:04
https://www.2ndquadrant.com/en/resources/2uda/

Айтуар
14.08.2017
14:30:47
Всем привет.
Можете подсказать как мне снять метрику - кол-во транзакций в секунду?
Можно из лога достать?

Andrey
14.08.2017
14:32:36
Если все транзакции явные, можно считать COMMIT и ROLLBACK.

Айтуар
14.08.2017
14:34:56

Игорь
14.08.2017
14:36:44

Айтуар
14.08.2017
14:40:23

Andrey
14.08.2017
14:40:38
По счетчику xid еще можно.

Игорь
14.08.2017
14:40:47
С момента сброса вроде
если нужно кол-во в сек, то просто rate в своем мониторинге

Айтуар
14.08.2017
14:43:35
Спасибо. Понял.

Александр
14.08.2017
18:00:01
Вот описание задачи https://www.evernote.com/l/AA0s8uZKRmVPQYYYud27wV9D6mDJfClDjbI
Большое спасибо @funny_falcon за помощь, решение вот такое, кому интересно:
select act1.first_name||' '||act1.last_name as first_actor,
act2.first_name||' '||act2.last_name as second_actor,
film.title
from (
select fa1.actor_id as aid1,
fa2.actor_id as aid2,
array_agg(fa1.film_id) as film_ids
from film_actor as fa1
join film_actor as fa2 using (film_id)
where fa1.actor_id < fa2.actor_id
group by 1, 2
order by array_length(array_agg(film_id), 1) desc
limit 1
) as most_wanted
join actor as act1 on aid1 = act1.actor_id
join actor as act2 on aid2 = act2.actor_id
join film on film.film_id = any(film_ids);

Рома
14.08.2017
18:22:06
Интересно! а что такое group by 1, 2?

Darafei
14.08.2017
18:30:28
по первой и второй колонке

Yury
15.08.2017
07:25:47
блин, поему нельзя написать:
SELECT posts.*
FROM posts
...
GROUP BY posts.*
...
* должна же работать как и в SELECT части

Admin
ERROR: S client not available

Yura
15.08.2017
07:26:37
А group by posts (без звездочки) не заработает?

Yury
15.08.2017
07:27:04
неа

Google

Yury
15.08.2017
07:27:07
он не понимает

Timur
15.08.2017
07:27:18
Дык по колонке же
Чо вы несёте

Yury
15.08.2017
07:27:23
т.е. он думает что posts.id нету в group by

Timur
15.08.2017
07:28:28
Чо вы несёте
А, извините, перепутал чат (чёртовы ники катаканой), но энивей, группировать можно по какому-либо столбу, а не по таблице целиком же

Yury
15.08.2017
07:29:03
ну так я хочу групировать по всем столбцам таблицы :)
логично же было бы если * тут так же как и в select отработало

Yura
15.08.2017
07:29:52
Как извращение, можно и в select без звездочки. Но придется в подзапрос вложить:
select (post).*, ... from (select posts as post, ... from posts ... group by post)

Yury
15.08.2017
07:30:30
надо глянуть BISON, что там, разрешено

Yura
15.08.2017
07:32:45
Другой вопрос: а не проще группировку по post_id сделать в подзапросе, а потом сджойнить с posts?

Yury
15.08.2017
07:34:09
не, мне нужна группировка по всей этой таблице

Mike Chuguniy
15.08.2017
07:34:11
Когда я вижу "SELECT * ...", мне становится грустно, печально тоскливо. Ибо сталкивался в своей практике с ситуациями, когда из-за такой конструкции сурово так осложнялось обновление приложений.

Yury
15.08.2017
07:34:15
там ещё join

Mike Chuguniy
15.08.2017
07:35:47
тут с указанием таблицы
Можно подумать, на эту таблицу никогда не понадобится ALTER, сопряжённый с добавлением/удалением столбцов.

Yury
15.08.2017
07:36:55
group_by_list:
group_by_item { $$ = list_make1($1); }
| group_by_list ',' group_by_item { $$ = lappend($1,$3); }
;
грустно как
ясно, * дерёгает данные на этапе исполнения почти, а проверка на group by в select чуть ли не на уровне парсера
но самое интересное - posts.* это валидное условие для group by
кажется если отключить проверку то не умрёт

Google

Kirill
15.08.2017
07:51:10
Distinct умеет работает со *. Но вообще, кажется делается что-то очень нехорошее. Еще группировка не со всеми типами умеет работать, например по json полю выдаст ошибку.

Yury
15.08.2017
07:53:46

Erushenko
15.08.2017
15:20:12
что-то не пойму как так, то???
http://joxi.ru/L214k8vH60QKNm
если должно буть +03:00