sexta-feira, 31 de janeiro de 2014

Dicas de PostgreSQL

Criando banco

**************************************************************************
torne-se root
gutocarvalho@pgsql01:~$ sudo -i
torne-se postgresql
root@pgsql:~$# su postgres
acesse o CLI do postgres
postgres@pgsql01:~$ psql
agora estamos na CLI
postgres=#

Criando usuario com senha

postgres=# CREATE USER fernandao WITH PASSWORD 'senha';

Criando o banco

postgres=# CREATE DATABASE eleicoes_carga;

Dando permissoes ao usuario para acessar o banco

postgres=# GRANT ALL PRIVILEGES ON DATABASE projeto_carga to fernando;

alterando owner do banco

postgres=# ALTER DATABASE projeto_carga OWNER TO fernando;

liberando acesso de uma maquina ao banco

após isto basta liberar o ip o cara no pg_hba.conf, veja um exemplo
# IPv4 local connections:  

host    all         all         127.0.0.1/32          md5  
host    all         all         172.16.10.20/32       md5 # gandalf  

configurando postgres para listar em todas as interfaces

e tenha certeza que o postgresql está rodando em todas as interfaces, veja isso em postgresql.conf
listen_addresses = '0.0.0.0'            # what IP address(es) to listen on;
precisa reiniciar o banco.

dump

dump de um banco inteiro - formato sql puro
pg_dump -U usuario -h ip_servidor nomedobanco > nomedobanco.sql
dump de um banco inteiro - formato binario
pg_dump -U usuario -h ip_servidor -Fc -f banco.dump nome_do_banco
dump de uma tabela do banco
pg_dump -U usuario -h ip_servidor -Fc -t tabela -f tabela.pgdump nome_do_banco
dump de um table de um schema
pg_dump -U postgres -h 127.0.0.1 -Fc -n schema -t tabela -f tabela.pgdump banco

restore

para restaurar um banco com dump em formato SQL
psql -U usuario -h ip_do_servidor -f nomeodabanco.sql nomedobanco
para restaurar um banco com dump em formato binário
pg_restore -U usuario -h ip_servidor -d nome_do_banco arquivo.dump
para restaurar somente os dados:
pg_restore -U usuario -h ip_servidor -a -d nome_do_banco arquivo.dump
para restaurar somente um determinado esquema
pg_restore -U usuario -h ip_servidor -n meu_esquema -d nome_do_banco arquivo.dump
para restaurar apenas os dados de uma tabela especifica
pg_restore -U usuario -h ip_servidor -a -t tabela_especifica -d nome_do_banco arquivo.dump

exemplos

fazendo dump de tabela da radioagencia
pg_dump -Fc -U drupal -h 127.0.0.1 -t drupal_webform -f arquivo -d drupal drupal_webform
restaurando tabela da radioagencia
pg_restore -Fc -U drupal -h 127.0.0.1 -t drupal_webform -d drupal drupal_webform
Observe o formato do DUMP, ele precisa ser tipo C ou tipo F para que o pg_restore consiga recuperar, se for plain text vai dar erro.

dicas soltas

alterando senha do usuario

postgres=#alter user fernando with password 'senha';

tamanho de uma base

dados sem arrendodamento, tamanho do bancos apenas
postgres=# SELECT pg_database_size('geekdb');
arredondando, tamanho do banco apenas
postgres=# SELECT pg_size_pretty(pg_database_size('geekdb'));
tamanho real do banco no disco arredondando
postgres=# SELECT pg_size_pretty(pg_database_size('somedatabase')) As fulldbsize;

tamanho de uma tabela

postgres=# SELECT pg_size_pretty(pg_total_relation_size('drupal_cache'));
nde

tamanho de todas as tabelas

postgres=# SELECT
  relname as "Table",
  pg_size_pretty(pg_total_relation_size(relid)) As "Size",
  pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) as "External Size"
  FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;
  

tamanho de todos as tabelas e objetos maiores que 64k

postgres=# SELECT
  relname AS objectname,
  relkind AS objecttype,
  reltuples AS "#entries", pg_size_pretty(relpages::bigint*8*1024) AS size
  FROM pg_class
  WHERE relpages >= 8
  ORDER BY relpages DESC;
  
  

tamanho da maior tabela para menor

SELECT relname, relpages FROM pg_class ORDER BY relpages DESC;

psql

usando o console

listando bancos

postgres=# \l

conectando a um banco

postgres=# \c nome_do_banco

outros

work mem

Quando algum processo pesado é executado, por exemplo a geracao de indices do drupal ou consultas que usam muito ORDER BY, um diretorio pgsqltemp será criado caso o uso da memoria setado na variavel WORKMEM seja execedido.
Nestes caso o aconselhável é aumentar - perante monitoramento - o parametro WORK_MEM na sessão em que está executando a query ou rodando os indices.
SET WORK_MEM TO "64MB"
Esse valor é por consulta, se colocar um valor muito alto a máquina vai sentar bonito, procure um valor entre 64 e 128, monitorando o servidor para verificar o impacto.

Nenhum comentário:

Postar um comentário