16.2. Criação do agrupamento de bancos de dados

Antes de ser possível fazer qualquer coisa, deve ser inicializada a área em disco para armazenamento dos bancos de dados. Isto é chamado de criação do agrupamento de bancos de dados (database cluster); em vez desse nome, o padrão SQL utiliza o termo agrupamento de catálogos (catalog cluster). Um agrupamento de bancos de dados é uma coleção de bancos de dados gerenciada por uma única instância de um servidor de banco de dados em execução. Após ser criado, o agrupamento de bancos de dados contém um banco de dados chamado template1. Como o nome sugere (em inglês), este banco de dados é utilizado como modelo para os próximos bancos de dados a serem criados; não deve ser utilizado para trabalho (Para obter informações sobre a como criar bancos de dados no agrupamento deve ser visto o Capítulo 18).

Em termos de sistema de arquivos, um agrupamento de bancos de dados é um único diretório sob o qual todos os dados são armazenados. Este diretório é chamado de diretório de dados ou área de dados. A escolha do local onde os dados são armazenados depende inteiramente de quem faz a instalação. Não existe nenhum padrão, embora sejam usuais locais como /usr/local/pgsql/data e /var/lib/pgsql/data. Para inicializar um agrupamento de bancos de dados é utilizado o utilitário initdb, que é instalado junto com o PostgreSQL. O local no sistema de arquivos escolhido para o agrupamento de bancos de dados é indicado pela opção -D como, por exemplo:

$ initdb -D /usr/local/pgsql/data

Deve ser observado que este comando deve ser executado enquanto conectado na conta de usuário do PostgreSQL, conforme descrito na seção anterior.

Dica: Pode ser definida a variável de ambiente PGDATA como alternativa ao uso da opção -D.

O utilitário initdb tenta criar o diretório especificado, caso não exista. É provável que não tenha permissão para criar o diretório (se for seguido o conselho de criar um usuário sem privilégios). Neste caso, o diretório deve ser criado utilizando a conta de usuário root, e mudado o dono do diretório para o usuário do PostgreSQL. Abaixo está mostrado como deve ser feito:

root# mkdir /usr/local/pgsql/data
root# chown postgres /usr/local/pgsql/data
root# su postgres
postgres$ initdb -D /usr/local/pgsql/data

O utilitário initdb se recusa a executar quando o diretório de dados parece que já foi inicializado.

Como o diretório de dados contém todos os dados armazenados no banco de dados, é essencial que esteja seguro contra acessos não autorizados. Portanto, o utilitário initdb revoga as permissões de acesso de todos, menos do usuário do PostgreSQL.

Entretanto, embora o conteúdo do diretório esteja seguro, a configuração de autenticação de cliente padrão permite qualquer usuário local se conectar ao banco de dados, e até mesmo se tornar o superusuário do banco de dados. Caso não se confie nos outros usuários locais, recomenda-se utilizar a opção -W, --pwprompt ou --pwfile do initdb, para atribuir uma senha para o superusuário do banco de dados. Também pode ser especificado -A md5 ou -A password para que não seja utilizado o modo de autenticação padrão trust; também pode ser modificado o arquivo pg_hba.conf gerado após a execução do utilitário initdb, antes de iniciar o servidor pela primeira vez (Outras abordagens razoáveis incluem a utilização da autenticação ident e permissões do sistema de arquivos para restringir as conexões. Para obter informações adicionais deve ser consultado o Capítulo 19).

O utilitário initdb também inicializa o idioma padrão para o agrupamento de bancos de dados. Normalmente, simplesmente pega as definições de idioma do ambiente e aplica ao banco de dados inicializado. É possível especificar um idioma diferente para o banco de dados; informações adicionais sobre este assunto podem ser encontradas na Seção 20.1. A ordem de classificação utilizada por um determinado agrupamento de bancos de dados é definida pelo utilitário initdb, e não pode ser mudada posteriormente, a não ser fazendo cópia de segurança de todos os dados, executando novamente o initdb e recarregando os dados. Também existe impacto no desempenho quando se utiliza um idioma diferente de C ou POSIX. Portanto, é importante fazer a escolha correta da primeira vez.

O utilitário initdb também define a codificação de caracteres padrão para o agrupamento de bancos de dados. Normalmente deve ser escolhida uma codificação que corresponda à definição do idioma. Para obter detalhes deve ser consultada a Seção 20.2.

SourceForge.net Logo CSS válido!