[PostgreSQL]Проверка на существование базы

Модератор: Модераторы разделов

Аватара пользователя
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux

[PostgreSQL]Проверка на существование базы

Сообщение minoru-kun »

Недавно, в ходе программистской практики, столкнулся с необходимостью проверки на существование базы данных перед ее созданием в PostgreSQL. К сожалению, таких вещей, как "CREATE TABLE IF NOT EXISTS" как в MySQL найдено не было. А оставление ненулевого кода возврата, в случае если база уже существует, недопустимо. Каким образом можно относительно элегантно решить эту проблему?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [PostgreSQL]Проверка на существование базы

Сообщение sash-kan »

так а в чем, собственно, проблема?
1. если бд не существует, то create database ее создаст.
2. если бд существует, то create database вернет ошибку.
независимо от варианта, после выполнения create database, можно быть уверенным, что бд существует.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux

Re: [PostgreSQL]Проверка на существование базы

Сообщение minoru-kun »

если бд существует, то create database вернет ошибку

...И выполнение постинсталляционного скрипта пакета Debian, коий, будучи мэнтэйнером я вынужден править, моментально прервется, а dpkg скажет что-то такое:

Код: Выделить всё

При обработке следующих пакетов произошли ошибки:
 <package>
E: Sub-process /usr/bin/dpkg returned an error code (1)

Хороша картинка. T_T
p.s. а почему строчка

Код: Выделить всё

EXISTS=`su - postgres -c "psql -l -At|awk '{print $1}'|grep \"$DB_PGBASE\""`

может выдавать код ошибки? o_O
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [PostgreSQL]Проверка на существование базы

Сообщение sash-kan »

minoru-kun писал(а):
29.12.2007 06:55
моментально прервется
установлен флаг -e? (set -e)

пример

$ cat /tmp/0 #!/bin/bash set -e asdfghjkl echo continue $ sh /tmp/0 /tmp/0: line 3: asdfghjkl: command not found $ cat /tmp/1 #!/bin/bash set -e asdfghjkl || echo fail echo continue $ sh /tmp/1 /tmp/1: line 3: asdfghjkl: command not found fail continue
за подробностями — в man bash на предмет set -e.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
sarutobi
Сообщения: 676
Статус: Добрость и скромнота
ОС: Debian 5, FreeBSD 6.2/8.0

Re: [PostgreSQL]Проверка на существование базы

Сообщение sarutobi »

minoru-kun,

Код: Выделить всё

psql -c \\l - At -d postgres
Fire and water, earth and sky - mistery surrounds us, legends never die!
Спасибо сказали: