Если программа работает с базой должна ли она(программа) создавать базу в случае, если базы с таким названием не существует?

Init_s
Дата: 27.04.2004 17:18:17
Заглянул
Дата: 27.04.2004 17:51:07
Программа должна работать с базой. А создаваться база должна во время установки/развертывания приложения. Вместе с пользователями, последовательностями, таблицами и другими объектами.


Это мое личное мнение.
Init_s
Дата: 27.04.2004 18:15:21
А если во время работы с базой она была олностью повреждена? Нет, как восстанавливать данные я знаю, а вот делать ли, грубо говоря, CREATE_DB ?
Заглянул
Дата: 27.04.2004 18:35:49
Восстановить из дампа, в смысле? Тогда нужно создать, конечно.
Снова обратимся к документации.

PostgreSQL Documentation

22.1.1. Restoring the dump
The text files created by pg_dump are intended to be read in by the psql program. The general command form to restore a dump is

psql dbname < infile
where infile is what you used as outfile for the pg_dump command. The database dbname will not be created by this command, you must create it yourself from template0 before executing psql (e.g., with createdb -T template0 dbname). psql supports similar options to pg_dump for controlling the database server location and the user name. See its reference page for more information.

If the objects in the original database were owned by different users, then the dump will instruct psql to connect as each affected user in turn and then create the relevant objects. This way the original ownership is preserved. This also means, however, that all these users must already exist, and furthermore that you must be allowed to connect as each of them. It might therefore be necessary to temporarily relax the client authentication settings.

Once restored, it is wise to run ANALYZE on each database so the optimizer has useful statistics. You can also run vacuumdb -a -z to ANALYZE all databases.

Init_s
Дата: 28.04.2004 10:36:35
Ну как может убиться база так, чтобы не просто данных, а даже ее имени на сервере не осталось? Вот сижу и ломаю голову, предоставить ли пользователю возможность создания базы или оставить только восстановление данных (pg_dump), подразумевая, что сама база находится на сервере.
Заглянул
Дата: 28.04.2004 11:31:16
2 Init_s:
Если что-то создавалось в базе template1, то в процессе восстановления могут появиться ошибки, связанные с попыткой повторного определения объекта. Вот пример.


dbtest=> create database test;
CREATE DATABASE
dbtest=> \q
bash-2.05b$ pg_dump test >test.out
bash-2.05b$ psql -d test -f test.out
You are now connected as new user postgres.
SET
psql:test.out:16: ERROR: function plpgsql_call_handler already exists with same argument types
psql:test.out:24: ERROR: Language plpgsql already exists
bash-2.05b$ psql template1
Welcome to psql 7.3.4-RH, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit

template1=# drop database test;
DROP DATABASE
template1=# create database test with template template0;
CREATE DATABASE
template1=# \q
bash-2.05b$ psql -d test -f test.out
You are now connected as new user postgres.
SET
CREATE FUNCTION
CREATE LANGUAGE

Я создал plpgsql в базе template1, для удобства, чтобы каждый раз не создавать в новой БД, поэтому появились ошибки при восстановлении.
Можете у себя проделать подобный тест.
Init_s
Дата: 29.04.2004 12:07:47
Видимо все-таки придется делать dropdb b createdb, а потом уже восстанавливать из pg_dump'а . А так не хотелось бы этого делать :(( Спасибо за тест!