[PostgreSQL]Проверка на существование базы
Модератор: Модераторы разделов
-
minoru-kun
- Сообщения: 621
- ОС: Debian GNU/Linux
[PostgreSQL]Проверка на существование базы
Недавно, в ходе программистской практики, столкнулся с необходимостью проверки на существование базы данных перед ее созданием в PostgreSQL. К сожалению, таких вещей, как "CREATE TABLE IF NOT EXISTS" как в MySQL найдено не было. А оставление ненулевого кода возврата, в случае если база уже существует, недопустимо. Каким образом можно относительно элегантно решить эту проблему?
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: [PostgreSQL]Проверка на существование базы
так а в чем, собственно, проблема?
1. если бд не существует, то create database ее создаст.
2. если бд существует, то create database вернет ошибку.
независимо от варианта, после выполнения create database, можно быть уверенным, что бд существует.
1. если бд не существует, то create database ее создаст.
2. если бд существует, то create database вернет ошибку.
независимо от варианта, после выполнения create database, можно быть уверенным, что бд существует.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
minoru-kun
- Сообщения: 621
- ОС: Debian GNU/Linux
Re: [PostgreSQL]Проверка на существование базы
если бд существует, то 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]Проверка на существование базы
установлен флаг -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Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
sarutobi
- Сообщения: 676
- Статус: Добрость и скромнота
- ОС: Debian 5, FreeBSD 6.2/8.0
Re: [PostgreSQL]Проверка на существование базы
minoru-kun,
Код: Выделить всё
psql -c \\l - At -d postgresFire and water, earth and sky - mistery surrounds us, legends never die!