O utilitário initdb cria um agrupamento de bancos de dados do PostgreSQL. Um agrupamento de bancos de dados é uma coleção de bancos de dados gerenciados por uma única instância do servidor.
Criar um agrupamento de banco de dados consiste em criar os diretórios onde os bancos de dados vão residir, gerar as tabelas do catálogo compartilhadas (tabelas que pertencem ao agrupamento como um todo, e não a um determinado banco de dados), e criar o banco de dados template1 e postgres. Quando, mais tarde, for criado um banco de dado, tudo que existe no banco de dados template1 será copiado automaticamente para o novo banco de dados. O banco de dados postgres é o banco de dados padrão para uso pelos usuários, utilitários e aplicativos de terceiros.
Embora o initdb tente criar o diretório de dados especificado, poderá não ter permissão para fazê-lo se o diretório pai do diretório de dados desejado pertencer ao usuário root. Para criar o agrupamento de bancos de dados em uma situação como esta deve-se: criar o diretório de dados vazio como root; usar o comando chown para atribuir a propriedade deste diretório ao usuário do banco de dados; executar o comando su para se tornar o usuário do banco de dados e executar o utilitário initdb.
O initdb deve ser executado pelo mesmo usuário que vai ser o dono do processo servidor, porque o servidor necessita ter acesso aos arquivos e diretórios criados pelo initdb. Como o servidor não deve ser executado pelo root, o utilitário initdb também não deve ser executado pelo root (Na verdade, recusa-se a fazê-lo).
O initdb inicializa o idioma e a codificação do conjunto de caracteres padrão do agrupamento de banco de dados. A ordem de intercalação (LC_COLLATE), e as classes de conjunto de caracteres (LC_CTYPE, por exemplo, maiúscula, minúscula e dígito), são fixadas para todos os bancos de dados e não podem ser modificadas. Existe, também, impacto no desempenho quando é escolhida uma ordem de intercalação diferente de C e de POSIX. Por estas razões, é importante fazer a escolha correta do idioma ao executar o initdb. As demais categorias de idioma podem ser mudadas posteriormente ao iniciar o servidor. Todos os valores de idioma do servidor (lc_*) podem ser vistos através do comando SHOW ALL. Podem ser encontrados mais detalhes na Seção 21.1.
A codificação do conjunto de caracteres de cada banco de dados pode ser definida individualmente, no momento da criação do banco de dados. O initdb determina a codificação do banco de dados template1, que serve de padrão para todos os outros bancos de dados. Para alterar a codificação padrão deve ser usada a opção --encoding. Podem ser encontrados mais detalhes na Seção 21.2.
Esta opção especifica o método de autenticação para os usuários locais usado no arquivo de configuração pg_hba.conf. Não use trust a menos que confie em todos os usuários locais do sistema. Trust é o padrão para facilitar a instalação.
Esta opção especifica o diretório onde o agrupamento de banco de dados será armazenado. Esta é a única informação requerida pelo initdb, mas pode-se evitar escrevê-la definindo a variável de ambiente PGDATA, o que é conveniente porque, depois, o servidor de banco de dados (postgres) poderá encontrar o diretório do bancos de dados usando esta mesma variável.
Seleciona a codificação do banco de dados modelo. Também será a codificação padrão para todos os bancos de dados criados posteriormente, a não ser quando for especificada uma outra. O padrão é derivado do idioma, ou SQL_ASCII se este não funcionar. Os conjuntos de caracteres suportados pelo servidor PostgreSQL estão descritos na Seção 21.2.1.
Define o idioma padrão para o agrupamento de banco de dados. Se esta opção não for especificada, o idioma será herdado do ambiente onde o initdb está executando. O suporte a idioma está descrito na Seção 21.1.
Como --locale, mas somente define o idioma para a categoria especificada.
Especifica o nome de usuário do superusuário do banco de dados. Por padrão o nome do usuário executando o initdb. Não importa realmente qual seja o nome do superusuário, mas é preferível manter o nome habitual postgres, mesmo que o nome do usuário do sistema operacional seja diferente.
Faz o initdb solicitar a senha a ser atribuída ao superusuário do banco de dados. Se não se pretende utilizar autenticação por senha, isto não tem importância. Senão, não será possível utilizar autenticação por senha enquanto não for atribuída uma senha.
Faz o initdb ler a senha do superusuário do banco de dados em um arquivo. A primeira linha do arquivo é lida como sendo a senha.
Também estão disponíveis outros parâmetros, menos utilizados:
Mostra a saída de depuração do servidor de bootstrap, e algumas outras mensagens de menor interesse para o público em geral. O servidor de bootstrap é o programa que o initdb utiliza para criar as tabelas do catálogo. Esta opção gera uma quantidade imensa de saída extremamente entediante.
Especifica onde o initdb deve encontrar os seus arquivos de entrada para inicializar o agrupamento de banco de dados. Será dito explicitamente se é necessário especificar a localização.
Por padrão, quando o initdb determina que um erro impediu a criação completa do agrupamento de bancos de dados, são removidos todos os arquivos criados antes de ser descoberto que não era possível terminar o trabalho. Esta opção impede a remoção e, portanto, é útil para a depuração.