
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

Yaroslav
17.10.2018
09:56:35

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

Таир
17.10.2018
10:14:19

Google

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

Yaroslav
17.10.2018
10:22:41

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
писать сложные конструкции не хотелось бы

F
17.10.2018
11:03:33

Mikhail
17.10.2018
11:05:10

Darafei
17.10.2018
11:06:33

Pavel
17.10.2018
11:24:07

crux
17.10.2018
11:25:22

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 будет скрипт

Pavel
17.10.2018
11:28:59

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

Pavel
17.10.2018
11:29:45

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

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
во-первых, почему у нас в 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

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

Mike Chuguniy
17.10.2018
13:36:10

Google

Aleksander
17.10.2018
13:36:54

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

Mike Chuguniy
17.10.2018
13:38:06

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

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