@pgsql

Страница 989 из 1062
Григорий
18.09.2018
11:34:01
Нет, там большинство записей нормальные, только некоторые такие

Eugen
18.09.2018
11:45:13
День добрый. А можно ли как-то присвоить alias LEFT JOINу? FROM t1 ( LEFT JOIN ..... LEFT JOIN .... ) as join 1 ( LEFT JOIN .... LEFT JOIN .... ) as join2 Дело в том, что в первом и втором больших JOINах имена таблиц могут пересекаться. можно ли как-то перегруппировать эти JOINы, чтобы не парсить их и не добавлять какие-то суффиксы для уникальности?

Google
Eugen
18.09.2018
11:47:12
Вроде как: Parentheses can be used around JOIN clauses to control the join order. In the absence of parentheses, JOIN clauses nest left-to-right. А вот что-то ругается на syntaxis error: http://paste.scsys.co.uk/581797

Eugen
18.09.2018
11:50:40
эт понятно, хотелось бы назначить алиас на весь JOIN

Anton [Mgn, az09@osm]
18.09.2018
11:56:11
Ну и на весь тоже. Но лучше на дубли всё же конкретизировать

Eugen
18.09.2018
11:59:49
о! похоже нашел: https://stackoverflow.com/a/43053011/4632019

Lestat -
18.09.2018
12:19:17
подскажите пожалуйста: ставлю pg10 на CentOS7 командой с офф. сайта далее пишу: yum install postgresql10 postgresql10-server -y тут всё хорошо далее туториал предлагает мне выполнить: /usr/pgsql-10/bin/postgres и тут команда валится с ошибкой: "root" execution of the PostgreSQL server is not permitted. The server must be started under an unprivileged user ID to prevent possible system security compromise. See the documentation for more information on how to properly start the server. как лечится? ( google не помог) заранее спасибо!

Maks
18.09.2018
12:19:58
запускай из под пользователя postgres

Yaroslav
18.09.2018
12:24:51
эт понятно, хотелось бы назначить алиас на весь JOIN
А зачем Вам? По-моему, это просто хуже (никаких преимуществ, одни недостатки), чем на каждую таблицу... нет?

Lestat -
18.09.2018
12:26:42
запускай из под пользователя postgres
спасибо! но теперь: LOG: syntax error in file "/var/lib/pgsql/10/data/postgresql.conf" line 1, near token """ внутри postgresql.conf: sten_addresses = "*"

Maks
18.09.2018
12:27:42
line 1, near token """

смотри что в первой строке у тебя не так

Lestat -
18.09.2018
12:28:35
смотри что в первой строке у тебя не так
там единственная строка: sten_addresses = "*" не понимаю что не так

Google
Maks
18.09.2018
12:29:12
как минимум должно быть listen_addresses

но как то мало для конфига

Lestat -
18.09.2018
12:29:56
Maks
18.09.2018
12:30:01
да

Lestat -
18.09.2018
12:30:36
да
теперь пишет что ошибка в обеих строках

Yaroslav
18.09.2018
12:31:04
listen_addresses = "*" ?
Неправильно, должно было быть: listen_addresses = '*'

теперь пишет что ошибка в обеих строках
Откуда Вы вообще взяли этот конфиг?! (Похоже на то, что он "битый", что очень странно.)

Yaroslav
18.09.2018
12:33:46
такой был при установке postgres
C: > sten_addresses = "*" Да это какой-то бред, в самом деле. :( Просто не верится... может быть, у Вас в самом деле "битое" железо (диск), ну или пакеты, из которых Вы ставили (хотя там д/б CRC)?

Lestat -
18.09.2018
12:35:21
(хотя там д/б CRC)? не знаю что это, по поводу железа: новый сервак, виртуалка centOS7 (хожу по ssh)

есть рабочий мануал установки postgres10 под рукой у кого-нибудь ? извиняюсь за нубячьи вопросы (впервые работаю с pg)

Айтуар
18.09.2018
12:39:23
У меня были проблемы с новым железом. Там прошивка в раид контроллере старая стояла.

Yaroslav
18.09.2018
12:40:19
> не знаю что это Это контрольные суммы, которые, по идее, должны предотвратить установку "битых" пакетов в систему. > есть рабочий мануал установки postgres10 под рукой у кого-нибудь ? Я же Вам пишу, попробуйте посмотреть в дистрибутиве. > извиняюсь за нубячьи вопросы (впервые работаю с pg) Ничего страшного, просто то, что у Вас происходит, мягко говоря, необычно (поэтому я и подумал о битом железе).

Yaroslav
18.09.2018
12:50:58
могу попросить пример postgresql.conf ?
Вы уже пробовали документацию дистрибутива почитать? (Понимаете, если у Вас действительно что-то битое, PostgreSQL просто "грохнется", независимо от config-а... и это ещё в лучшем случае). Т.е. разберитесь, что происходит, сначала.

Lestat -
18.09.2018
12:51:14
хорошо, спасибо

S
18.09.2018
12:53:49
хорошо, спасибо
/usr/pgsql-10/share/postgresql.conf.sample

Anton [Mgn, az09@osm]
18.09.2018
12:54:14
хорошо, спасибо
https://t.me/cent_os_ru

Кондр
18.09.2018
13:02:50
Есть в постгрес возможность объеденить результат запроса в строку с разделителем?

Google
Сергей
18.09.2018
13:04:44
одну строку вернуть? ну приведите все поля к строке, сконкатенируйте и верните строку

Ilia
18.09.2018
13:05:22
Кондр
18.09.2018
13:06:48
одну строку вернуть? ну приведите все поля к строке, сконкатенируйте и верните строку
да. В sql server это костылем делалось. В firebird отдельная функция есть для этого. А вот как в postgre это замутить я не знаю

Сергей
18.09.2018
13:08:39
concat_ws(sep text, str "any" [, str "any" [, ...] ]) text Concatenate all but first arguments with separators. The first parameter is used as a separator. NULL arguments are ignored. concat_ws(',', 'abcde', 2, NULL, 22) abcde,2,22 https://www.postgresql.org/docs/9.1/static/functions-string.html

Yaroslav
18.09.2018
13:13:28
да. В sql server это костылем делалось. В firebird отдельная функция есть для этого. А вот как в postgre это замутить я не знаю
"Костыль" — это заниматься такими вещами, IMNSHO. :( Т.е. лучше бы Вы этого не делали, а если делаете, то на клиенте. У Вас сколько/каких записей в результате запроса?

Eugen
18.09.2018
13:14:08
Там в ней определяетс набор данных. Поэтом этот набор можно как подзапросом, а можно с другим JOIN. Использовать можно несколько раз. Вот поэтому и хочется на этот весь набор (запрос) назначить алиас средствами Postgres, а не возиться с каждой таблицей, с каждым полем....

Сергей
18.09.2018
13:14:31
почитайте про orm

Yaroslav
18.09.2018
13:14:48
Не. Вот такое нужно http://firebirdsql.su/doku.php?id=list
Судя по: > LIST() является агрегатной функцией, которая обьединяет все элементы группы в строку-список. Вам нужен string_agg. См. https://www.postgresql.org/docs/current/static/functions-aggregate.html

Кондр
18.09.2018
13:16:31
"Костыль" — это заниматься такими вещами, IMNSHO. :( Т.е. лучше бы Вы этого не делали, а если делаете, то на клиенте. У Вас сколько/каких записей в результате запроса?
да я понимаю. Бд нагружает сильно. Но так было сделано на sql server и мне надо перенести бд. Записей довольно много

Eugen
18.09.2018
13:22:20
вот научился правильно расставлять скобочки. PG показывает даже план одинаковый

http://paste.scsys.co.uk/581799

и вот он алиас на весь JOIN: left join (users_roles ur left join roles r on r.id = ur.role_id ) as urr on urr.user_id = u.id;

Yaroslav
18.09.2018
13:24:59
и вот он алиас на весь JOIN: left join (users_roles ur left join roles r on r.id = ur.role_id ) as urr on urr.user_id = u.id;
А вот зря Вы не захотели попробовать. Ну так покажите же, как Вы выберете какое-нибудь из полей с одинаковым названием из этого urr. ;)

Eugen
18.09.2018
13:26:06
аа, так мне промежуточные не нужны, то что их нет, как раз и хорошо.

Google
Eugen
18.09.2018
13:27:19
хотя да я понял о чём вы.

Yaroslav
18.09.2018
13:28:35
аа, так мне промежуточные не нужны, то что их нет, как раз и хорошо.
Да что хорошего?! Если у Вас "случайно" совпадут названия полей, как Вы собираетесь записывать их в SELECT-е, если Вам нужно хотя бы одно из них? Короче говоря, это (JOIN alias) какая-то "странная" возможность, мне кажется.

Eugen
18.09.2018
13:29:30
навернео это должно было разрулиться, когда составляется имена для колонок: ( ......... ) as tablealias( ur.*, r.* )

или более конкретно: ( ......... ) as tablealias( r.id as id, ur.id as urid )

Andrei
18.09.2018
13:31:33
Какая-то ерунда, ИМХО Ярослав прав

Eugen
18.09.2018
13:32:11
Кстати, нашел решение

select * from users u left join (select * from users_roles ur left join roles r on r.id = ur.role_id ) as urr on urr.user_id = u.id;

Делать subselect,

explain показывает тот же план

Andrei
18.09.2018
13:33:32
а почему лефт джойны?

юзер_роли могут быть без ролей?

аналогично, юзеры

)))

Yaroslav
18.09.2018
13:34:25
explain показывает тот же план
Да причём тут план? ;) Вы вот возьмите две разные таблицы, пусть в каждой есть поле "name", и сошлитесь на одно из них "снаружи" join alias. > Делать subselect, Ну а это уже не join alias. ;)

Eugen
18.09.2018
13:35:48
>Ну а это уже не join alias. ;) а выглядет один в один. Разве что select * from опущено для читабельности

select * from users u left join (select * from users_roles ur left join roles r on r.id = ur.role_id ) as urr on urr.user_id = u.id; select * from users u left join ( users_roles ur left join roles r on r.id = ur.role_id ) as urr on urr.user_id = u.id;

Terminator
18.09.2018
13:36:56
@i_scarface будет жить. Поприветствуем!

Eugen
18.09.2018
13:37:32
радует меня сегодняшние бызы. Лет 15 назад на такое бы слюнки аж текли )

Nikita
18.09.2018
13:37:34


Yaroslav
18.09.2018
13:40:34
радует меня сегодняшние бызы. Лет 15 назад на такое бы слюнки аж текли )
Если Вы про JOIN alias, то и 15 лет назад я бы выбросил куда подальше. ;) Yet another feature, сделанная в PosgreSQL только из страсти совместимости с ISO SQL, мне кажется...

Google
Eugen
18.09.2018
13:41:05
Да причём тут план? ;) Вы вот возьмите две разные таблицы, пусть в каждой есть поле "name", и сошлитесь на одно из них "снаружи" join alias. > Делать subselect, Ну а это уже не join alias. ;)
вот, пожалуйста, сослался: select urr.urid, urr.rid from users u left join (select ur.id as urid, r.id as rid users_roles ur left join roles r on r.id = ur.role_id ) as urr on urr.user_id = u.id;

Yaroslav
18.09.2018
13:42:47
Т.е., грубо говоря, non-ACID, "AP" из CAP? Посмотрите, наверное... citus, или какие-нибудь burcardo... (не уверен, впрочем, может быть, кто-то ещё подскажет).

Eugen
18.09.2018
13:44:26
извините, не силён пока в терминологии

Mike Chuguniy
18.09.2018
13:45:01
У нас есть ВСЁ! Кроме совести и денеХ. :) Выбирайте, какой желаете: https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling

Eugen
18.09.2018
13:45:07
главное то, что запросы эквивалентные получились

Andrei
18.09.2018
13:45:10
Mike Chuguniy
18.09.2018
13:45:17
Хых. И мучайтесь.

Eugen
18.09.2018
13:48:49
select * from users u left join (select * from users_roles ur left join roles r on r.id = ur.role_id ) as urr on urr.user_id = u.id; select * from users u left join ( users_roles ur left join roles r on r.id = ur.role_id ) as urr on urr.user_id = u.id;
аха, а вот и секция в документации, которая говорит, что users и select * from users — это одно и тоже: https://www.postgresql.org/docs/10/static/queries-table-expressions.html#id-1.5.6.6.5.8.2

Mike Chuguniy
18.09.2018
13:51:43
Сказано же - мучайтесь. Мне хватает понимания, что такое РСУБД и описаний попыток построить мультимастер, чтобы всерьёз не рассматривать подобные непотребства. Причём независимо от конкретной РСУБД.

Yaroslav
18.09.2018
13:51:47
Eugen
18.09.2018
13:53:14
я не против. Главное задача решена.

Yaroslav
18.09.2018
14:08:11
я не против. Главное задача решена.
Я так и не понял, чем Вас не устроили alias-ы для каждой таблицы (ну или элемента FROM)? И писать меньше, и ссылаться проще.

Eugen
18.09.2018
14:10:21
Я так и не понял, чем Вас не устроили alias-ы для каждой таблицы (ну или элемента FROM)? И писать меньше, и ссылаться проще.
тем, что 2 раза один и тот же SQL не напишешь: FROM users u LEFT JOIN users_roles ur on ur.user_id = u.id LEFT JOIN roles r on r.id = ur.user_id LEFT JOIN users_roles ur on ur.user_id = u.id LEFT JOIN roles r on r.id = ur.user_id

ERROR: table name "ur" specified more than once

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