@pgsql

Страница 1038 из 1062
Mike Chuguniy
17.10.2018
09:44:07
И почему вызов <db>.<schema>.<func_name> - это не совсем верно в ПГ. Это больше на мыскль похоже.

В любом случае синтаксис <dbname>.<schemaname>.<objname> - ошибочный.

В пг пользователь ВСЕГДА подключается к какой-нибудь базе. Соответственно, обратиться без лишних телодвижений (dblink || *_fdw) он может только к объектам той базы, к который подключился.

Артем
17.10.2018
09:46:55
CALL не нужен?

Google
Alexander
17.10.2018
09:47:44
если заменить его на select, то будет новая ошибка

про базы и схемы

juriy
17.10.2018
09:48:05
так а perform почему не подходит?

Артем
17.10.2018
09:48:05
как вызывать то тогда?

Alexander
17.10.2018
09:48:49
ни в создании, ни в вызове не надо базу указывать, как выше и писал Михаил

Артем
17.10.2018
09:49:35
ща сек попробую

SELECT не нужен?

juriy
17.10.2018
09:51:12
SELECT не нужен?
нет, надо PERFORM - функция ничего не возвращает (returns void) - поэтому селектить из её "результата" нечего)) ну и плюс имя БД не надо как сказали выше

Yaroslav
17.10.2018
09:52:24
SELECT не нужен?
Да у Вас вообще там много того, чего в PostgreSQL делать не стоит... Мигрируете откуда-то?

juriy
17.10.2018
09:54:34
Да у Вас вообще там много того, чего в PostgreSQL делать не стоит... Мигрируете откуда-то?
кстати, да, из замеченного - вместо varchar(255) можно text воткнуть - в терминах оптимизации постгресу на это пофиг, судя по доке (поправьте кстати тоже, если ошибаюсь, сам новичок в PG)

Yaroslav
17.10.2018
09:56:35
Mike Chuguniy
17.10.2018
10:03:24
SELECT не нужен?
Нужен. PERFORM используется внутри ф-ий в случае, когда результаты запроса не нужны.

Таир
17.10.2018
10:14:19
кстати, да, из замеченного - вместо varchar(255) можно text воткнуть - в терминах оптимизации постгресу на это пофиг, судя по доке (поправьте кстати тоже, если ошибаюсь, сам новичок в PG)
не то чтобы пофиг, просто text постгресом оптимизируется для коротких строк, насколько я помню, а длинные автоматом уходят в toast

Google
Таир
17.10.2018
10:14:57
вот только не помню, какой пороговый размер

Yaroslav
17.10.2018
10:22:41
не то чтобы пофиг, просто text постгресом оптимизируется для коротких строк, насколько я помню, а длинные автоматом уходят в toast
Именно что пофиг. varchar(неведомое число) просто хуже (почему — см. выше). (В плане хранения отличий нет.) А если есть явный constraint на длину поля, то его лучше и задавать как CHECK CONSTRAINT (ну или DOMAIN).

Terminator
17.10.2018
10:24:17
@alekceevanton будет жить. Поприветствуем!

@twilight_ghost будет жить. Поприветствуем!

Артем
17.10.2018
11:00:48
Ребят спасибо PERFORM - сработало

Mikhail
17.10.2018
11:02:45
всем привет. сорри за дурацкий вопрос, но как в psql сделать запрос, аналогичный вот этому: "CREATE DATABASE IF NOT EXISTS my_db;"? хотелось бы минимизировать код, т.к. это нужно для entrypoint.sh

писать сложные конструкции не хотелось бы

Mikhail
17.10.2018
11:05:10
select db from databases;
relation "databases" does not exist LINE 1: select db from databases;

crux
17.10.2018
11:25:22
всем привет. сорри за дурацкий вопрос, но как в psql сделать запрос, аналогичный вот этому: "CREATE DATABASE IF NOT EXISTS my_db;"? хотелось бы минимизировать код, т.к. это нужно для entrypoint.sh
можно сделать скрипт, который будет создавать базу по условиям и запускать через psql кроме создания базы моджет понадобиться раздать права на неё, например. параметры скрипту можно передавать через -v var="value" в скрипте, например, create database :var тогда в entrypoint будет одна строка запуска psql

Mikhail
17.10.2018
11:27:23
эммм... пока всё озвученное усложняет конструкцию: wait_for_db() { counter=0 while ! `psql --quiet --tuples-only --command="CREATE DATABASE IF NOT EXISTS $DB_DATABASE" 2> /dev/null`; do if [ $counter == 30 ]; then echo "no more attempts!" echo "Error: Couldn't connect to a database." exit 1 fi echo "attempt $counter was failed." counter=$((counter+1)) echo "Trying to connect to a database at $PGHOST... " sleep 5 done }

crux
17.10.2018
11:28:42
чем усложняет, вместо command будет скрипт

crux
17.10.2018
11:29:24
проверить существование базы: select 1 from pg_catalog.pg_database where datname = 'dbname'

crux
17.10.2018
11:30:01
ну count(*)

пустой датасет - тоже признак в общем-то

Google
Pavel
17.10.2018
11:30:43
ну как бы да, но его ж по-другому проверять надо )

crux
17.10.2018
11:30:56
но если не хочется пустых датасетов, то select count(*)

Pavel
17.10.2018
11:36:16
DO $$ PERFORM 1 FROM pg_database WHERE datname = 'my_db'; IF NOT FOUND THEN CREATE DATABASE ... END IF; $$

crux
17.10.2018
11:37:02
Красиво и понятно. )

Pavel
17.10.2018
11:37:14
это ж как работать не хочется ))) прокрастинация на новом уровне )

Mikhail
17.10.2018
11:39:02
аааааа!!! блин, если даже для CREATE EXTENSION есть операнд IF NOT EXISTS, почему его для базы не сделали!!!

Pavel
17.10.2018
11:39:40
аааааа!!! блин, если даже для CREATE EXTENSION есть операнд IF NOT EXISTS, почему его для базы не сделали!!!
Ну как бы, ожидается, что если уж человек базу создает, то что-то важное происходит ))

Mike Chuguniy
17.10.2018
11:39:55
Pavel
17.10.2018
11:41:25
https://stackoverflow.com/questions/18389124/simulate-create-database-if-not-exists-for-postgresql

Вот правильный ответ. Мой неверный. CREATE DATABASE не может быть внутри транзакционного блока

Сергей
17.10.2018
11:43:16
после создания ожидают чистую базу, подход error prone такой

Алексей
17.10.2018
11:43:43
Мне трудно так с ходу придумать ситуацию, когда может потребоваться автоматизированное создание БД

Сергей
17.10.2018
11:45:02
а вот создавать базу если не существует - и правда такое себе...

Mikhail
17.10.2018
11:45:45
мой пример: загрузка базы OSM в кубике. на этапе подготовки окружения проверяется наличие подключения к базе и существования базы. название базы передается через ENV

то есть можно запустить несколько джобов с разным PGDATABASE, и они все параллельно начнут литься

в этом случае заранее создаётся юзер и ему даются гранты на создание базы. остальное - автомат

Михаил
17.10.2018
11:47:43
Создавайте базу вне транзакции

Mikhail
17.10.2018
11:48:04
тогда ломается CD

Google
Михаил
17.10.2018
11:48:37
Файловая система не транзакционна по определению, поэтому операция создания базы не может выполняться в рамках транзакции

Сергей
17.10.2018
11:48:50
тогда ломается CD
вы что-то делаете не так значит

во-первых, почему у нас в ci одна база на все воркеры?

сделайте изолированно

Mikhail
17.10.2018
11:50:12
Все необходимые параметры передаются через ENV

Terminator
17.10.2018
13:03:46
Сергей Колмаков будет жить. Поприветствуем!

Sab0
17.10.2018
13:25:58
ребят, посоветуйте веб-морду для постгри плз

желаетльно, халявную)

Stanislav
17.10.2018
13:29:14
phpPgAdmin

Eugene
17.10.2018
13:29:26
pgadmin4)

Mike Chuguniy
17.10.2018
13:30:36
phppgadmin (бу-га-га).

Stanislav
17.10.2018
13:33:16
phppgadmin (бу-га-га).
знаешь халявные вещи лучше?

Mike Chuguniy
17.10.2018
13:34:25
Продукт, который несколько лет не обновлялся - он да, мощный. И да, не халявный, а не требующий лицензионных отчислений - для меня данное различие весьма существенно.

Sab0
17.10.2018
13:34:53
черт, ненавижу выбирать))

Aleksander
17.10.2018
13:35:18
почему не работает конструкция position(p, substr(col, i - 1, 1)) ругается на syntax error at or near ","

Sab0
17.10.2018
13:35:23
я с mysql перехожу сейчас, это сильно больно будет?

ни разу не юзал постгрю

Sergey
17.10.2018
13:36:05
я с mysql перехожу сейчас, это сильно больно будет?
Смотря в какое место засовывать.

Mike Chuguniy
17.10.2018
13:36:10
я с mysql перехожу сейчас, это сильно больно будет?
Миграция - это ВСЕГДА больно. Независимо от.

Google
Aleksander
17.10.2018
13:36:54
Sab0
17.10.2018
13:36:59
у меня парсеры сами прописывают sql запросы, а они, как я понимаю, в пстгр такие же. так что переносить особо нечего) просто сервис на нем запущу с нуля

через день-два будет такое же все. но, возможно, я ошибаюсь

Sab0
17.10.2018
13:38:25
не, на пайтоне код тупо сам делает запросы

mysqldb либа

Mike Chuguniy
17.10.2018
13:38:36
Миграция - это будет не больно. Это будет *ОЧЕНЬ БОЛЬНО*

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