Установка dbname условно из блока PostgreSQL - PullRequest
0 голосов
/ 04 марта 2019

Я должен подключиться к БД, если таковой имеется, а если ее нет, мы должны создать БД с другим именем и подключиться к ней.Следовательно, нам нужно соединение с БД, чье имя будет меняться в зависимости от вышеуказанного условия.

Мой текущий код выглядит так:

DO $$
BEGIN
   IF EXISTS (SELECT 1 FROM pg_database WHERE datname = 'xdb') THEN
      RAISE NOTICE 'Database already exists';
   ELSE
      RAISE NOTICE 'Database does not exist';
      PERFORM dblink_exec('dbname=' || current_database()||' user=puser'  -- current db
                        , 'CREATE DATABASE "ydb" with owner puser');
   END IF;
END $$;
\connect 'xdb' ---->> This DB should be either xdb or ydb based on the above condition
## Other insert statements

Есть ли способ, которым я могу этого достичь?Мы используем Postgres 11.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Или, возможно:

select case when exists (select 1 from pg_database where datname = 'xdb') 
          then 'xdb'::text
          else 'ydb' 
       end as conndb \gset
\connect :conndb 
0 голосов
/ 04 марта 2019

Я предполагаю, что это сценарий psql.

Вы можете использовать условную обработку в psql:

\if :reconnect
\connect xdb
\endif

Переменная может быть установлена ​​с помощью

\set reconnect 1

в соответствующей ветке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...