Configurar COLLATE e CTYPE no PostgreSQL

Ao instalar um novo serviço de servidor PostgreSQL as opções de COLLATE e CTYPE podem estar fora da configuração ideal.

Não é possível alterar essas opções em bancos já criados. Uma solução é fazer um backup, criar o banco com as opções desejadas e restaurar o banco na sequencia.

Para deixar as opções no estado padrão desejado, execute o script abaixo.

ALTER database template1 is_template=false;

DROP database template1;

CREATE DATABASE template1
WITH OWNER = postgres
   ENCODING = 'UTF8'
   TABLESPACE = pg_default
   LC_COLLATE = 'en_US.UTF-8'
   LC_CTYPE = 'en_US.UTF-8'
   CONNECTION LIMIT = -1
   TEMPLATE template0;

ALTER database template1 is_template=true;

Trocando o dono (OWNER) de todas tabelas de um banco de dados PostgreSQL

Eventualmente podemos nos defrontar uma um banco de dados cujas tabelas possuem diferentes donos (alguma falta de padrão no momento da criação).

O script abaixo troca o dono para o desejado. Deve ser executado dentro do banco alvo.

SELECT format(
          'ALTER TABLE public.%I OWNER TO novo_dono',
          table_name
       )
FROM information_schema.tables
WHERE table_schema = 'public'
  AND table_type = 'BASE TABLE' \gexec

Atribuindo privilégios em tabelas e sequencias no PostgreSQL

Ao restaurar um banco de dados em um servidor diferente do original é comum não ter o mesmo usuário registrado nesse novo servidor ou mesmo fazer a escolha de outro para uso em ambiente de produção.

O PostgreSQL vai proibir o acesso depois de uma restauração nesses casos por parte do aplicativo que usa um novo usuário.

Para atribuir esses privilégios a um usuário no banco de dados, abra o aplicativo psql como usuário postgres:

su postgres
psql nome_do_bd

Dentro do psql execute os comandos (atenção se seu schema não for o public):

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO nome_do_usuario;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO nome_do_usuario;