PostgreSQL

De Biblioteca Unix

Conteúdo

PostgreSQL

Debian Wheeze 8.0

Instalando os Pacotes necessários

Vamos primeiramente instalar o serviço do PostgreSQL:

# apt-get install postgresql-9.1

isso vai instalar todos os pacotes e dependências necessárias.

Definindo uma senha para o DBA

Diferente do MySQL não cria por padrão uma senha para o usuário postgres, vamos definir uma senha para este usuário:

# su - postgres
# psql -c "ALTER USER postgres WITH PASSWORD 'novasenha'"

pronto. Não esqueça de modificar o arquivo pg_hba para acessar utilizando a senha (trocar o ident por md5).

Se você estiver seguindo os passos para configurar um servidor de e-mail com PostgreSQL, não altere a senha do usuários postgres enquando não for pedido para que isso seja executado

Atribuíndo Permissão no Banco a Outro Usuário

Primeiro crie um novo usuário:

# createuser USUARIO

Depois a um banco já criado atribua os privilégios a esse usuário:

#  psql -c "GRANT ALL PRIVILEGES ON DATABASE banco_de_dados to USUARIO;"
GRANT

e o usuário terá todos os privilégios no banco especificado.

Recuperação de invalid primary checkpoint

Para se recuperar deste erro no Debian é necessário virar usuário postgres primeiro:

# su - postgres

Como usuário postgres, execute o comando abaixo para dar um reset nos checkpoints do banco usando a ferramenta de DISASTER-RECOVERY:

$ /usr/lib/postgresql/9.1/bin/pg_resetxlog -f /var/lib/postgresql/9.1/main/

Feito isso, os logs serão reinicializados e você poderá iniciar o PostgreSQL normalmente:

# service postgresql start

Pronto.

Recuperando falhas missing chunk number

O primeiro passo é você tentar a operação menos traumática: realizar REINDEX e VACCUM na tabela danificada. Se isso não funcionar, para se recuperar, é necessário descobrir quais linhas foram danificadas. Uma forma de fazer isso é executando uma linha de comando como à seguir:

# for ((i=0; i<TOTALTABLEROWS; i++ )); do psql -U user  database -c "SELECT * FROM table LIMIT 1 offset $i" >/dev/null || echo $i; done

Quando este comando finalizar, você saberá quais as linhas danificadas. A solução é removê-las, mas não diretamente. Quando um erro for encontrado, você vera linhas como a seguir:

ERROR:  missing chunk number 0 for toast value 1269808 in pg_toast_93917
162558
ERROR:  missing chunk number 0 for toast value 1269810 in pg_toast_93917
162559

É importante fazer uma cópia de segurança antes de continuar:

CREATE TABLE table_bkp1 AS SELECT * FROM mytable LIMIT 162558;
CREATE TABLE table_bkp2 AS SELECT * FROM mytable OFFSET 162559;

Isso vai criar uma cópia dos dados em tabelas auxiliares de antes e depois da linha danificada. Em seguida, vamos apagar as linhas danificadas:

SELECT CTID FROM table LIMIT 2 OFFSET 162558;

Como nossos erros estão em sequência, o LIMIT deve ser 2. Agora, com os dados em mãos, vamos remover as linhas danificadas:

DELETE FROM table WHERE CTID IN(SELECT CTID FROM table LIMIT 2 OFFSET 162558);

E era isso.


Debian Wheeze 7.0

Instalando os Pacotes necessários

Vamos primeiramente instalar o serviço do PostgreSQL:

# apt-get install postgresql-9.1

isso vai instalar todos os pacotes e dependências necessárias.

Definindo uma senha para o DBA

Diferente do MySQL não cria por padrão uma senha para o usuário postgres, vamos definir uma senha para este usuário:

# su - postgres
# psql -c "ALTER USER postgres WITH PASSWORD 'novasenha'"

pronto. Não esqueça de modificar o arquivo pg_hba para acessar utilizando a senha (trocar o ident por md5).

Se você estiver seguindo os passos para configurar um servidor de e-mail com PostgreSQL, não altere a senha do usuários postgres enquando não for pedido para que isso seja executado

Atribuíndo Permissão no Banco a Outro Usuário

Primeiro crie um novo usuário:

# createuser USUARIO

Depois a um banco já criado atribua os privilégios a esse usuário:

#  psql -c "GRANT ALL PRIVILEGES ON DATABASE banco_de_dados to USUARIO;"
GRANT

e o usuário terá todos os privilégios no banco especificado.

Recuperação de invalid primary checkpoint

Para se recuperar deste erro no Debian é necessário virar usuário postgres primeiro:

# su - postgres

Como usuário postgres, execute o comando abaixo para dar um reset nos checkpoints do banco usando a ferramenta de DISASTER-RECOVERY:

$ /usr/lib/postgresql/9.1/bin/pg_resetxlog -f /var/lib/postgresql/9.1/main/

Feito isso, os logs serão reinicializados e você poderá iniciar o PostgreSQL normalmente:

# service postgresql start

Pronto.

Debian Squeeze 6.0

Instalando os Pacotes necessários

Vamos primeiramente instalar o serviço do PostgreSQL:

# apt-get install postgresql-8.4

isso vai instalar todos os pacotes e dependências necessárias.

Definindo uma senha para o DBA

Diferente do MySQL não cria por padrão uma senha para o usuário postgres, vamos definir uma senha para este usuário:

# su - postgres
# psql -c "ALTER USER postgres WITH PASSWORD 'novasenha'"

pronto. Não esqueça de modificar o arquivo pg_hba para acessar utilizando a senha (trocar o ident por md5).

Se você estiver seguindo os passos para configurar um servidor de e-mail com PostgreSQL, não altere a senha do usuários postgres enquando não for pedido para que isso seja executado


Debian Lenny 5.0

Instalando os Pacotes necessários

Vamos primeiramente instalar o serviço do PostgreSQL:

# apt-get install postgresql-8.3

isso vai instalar todos os pacotes e dependências necessárias.

Definindo uma senha para o DBA

Diferente do MySQL não cria por padrão uma senha para o usuário postgres, vamos definir uma senha para este usuário:

# su - postgres
# psql -c "ALTER USER postgres WITH PASSWORD 'novasenha'"

pronto. Não esqueça de modificar o arquivo pg_hba para acessar utilizando a senha (trocar o ident por md5).

Se você estiver seguindo os passos para configurar um servidor de e-mail com PostgreSQL, não altere a senha do usuários postgres enquando não for pedido para que isso seja executado.


RedHat/CentOS 6.2

Instalando os Pacotes necessários

Vamos primeiramente instalar o serviço do PostgreSQL:

# yum install postgresql-server

isso vai instalar todos os pacotes e dependências necessárias. Agora vamos deixar o PostgreSQL iniciando na inicialização:

# chkconfig --level 345 postgresql on

antes de inicializar o serviço é necessário inicializar o banco de dados:

# service postgresql initdb

agora é possível inicializar o serviço do PostgreSQL:

# service postgresql start
Iniciando o serviço postgresql:                            [  OK  ]

Pronto.

Definindo uma senha para o DBA

Diferente do MySQL não cria por padrão uma senha para o usuário postgres, vamos definir uma senha para este usuário:

# su - postgres
# psql -c "ALTER USER postgres WITH PASSWORD 'novasenha'"

pronto. Não esqueça de modificar o arquivo pg_hba.conf para acessar utilizando a senha (trocar o ident por md5):

# vim /var/lib/pgsql/data/pg_hba.conf
...
# "local" is for Unix domain socket connections only
local   all         all                               ident
...

para:

...
# "local" is for Unix domain socket connections only
local   all         all                               md5
...

feito isso, reinicie o serviço do PostgreSQL:

# service postgresql restart

e está pronto.

--Brivaldo 01h59min de 17 de abril de 2012 (AMT)

Ferramentas pessoais