Sei sulla pagina 1di 2

PostgreSQL - Dicas Avanadas https://gist.github.

com/claudioaccr/7792328

1 Dicas Avanadas de PostgreSQL


2
3 # Gerando series de nmeros e datas
4 select generate_series(1,100) as sequencia -- Gera os numeros de 1 a 100
5 select generate_series(0,29) + date '2012-04-01' as data -- Gera 29 datas em sequencia
6
7 Exemplo:
8
9 -- Gerar as certidoes 1111/2012 a 1794/2012
10 insert into certidoes
11 select (nu_certidao || 2012)::integer,
12 current_timestamp,
13 '11432417',
14 null, null, null, null,
15 'S'
16 from ( select generate_series(1111, 1794) as nu_certidao ) as x ;
17
18 --Gerar datas entre um perodo de incio e fim
19 select generate_series(0, date '2013-05-07' - date '2013-04-07' ) + date '2013-04-07'
20
21 --Gerar datas entre um hoje e os prximos 30 dias
22 select generate_series(0, 30 ) + current_date
23
24 --Geras datas do tipo timestamp entre dois intervalos
25 select generate_series(timestamp '2013-01-01 00:00:00', timestamp '2013-01-01 23:59:59', '15 minutes')
26
27 --Gerar o ltimo dia de cada ms do ano
28 select generate_series(timestamp '2013-01-01', timestamp '2013-12-31', '1 month') + interval '1 month' - interval '1 day'
29
30
31 # Gerando linhas de registro a partir de um array
32 select * from unnest(array[12, 25, 13]);
33
34 obs.: Esta funo s existe a partir da verso 8.4 do Postgresql. Para verses 8.3 e anteriores, criar a funo abaixo:
35
36 CREATE OR REPLACE FUNCTION unnest(anyarray)
37 RETURNS SETOF anyelement AS
38 $BODY$
39 SELECT $1[i] FROM
40 generate_series(array_lower($1,1),
41 array_upper($1,1)) i;
42 $BODY$
43 LANGUAGE 'sql' IMMUTABLE
44
45
46 # Como criar um banco LATIN1 no PostgreSQL 8.4
47 CREATE DATABASE nome_do_banco WITH ENCODING 'latin1' LC_COLLATE='C' LC_CTYPE='C' TEMPLATE=template0;
48
49
50 # Criar um nmero aleatrio dentro de um intervalo (Ex.: Entre 10 e 20, incluindo os mesmos)
51 SELECT 10 + round(CAST (random()*(1+20-10) AS NUMERIC),0);
52
53
54 # Operaes com TimeStamp
55 select current_timestamp + interval 3 days; #soma 3 dias data/hora atual
56
57
58 # Listar o nmero de conexes com os databases
59 select datname, numbackends from pg_stat_database;
60
61
62 # Listar as conexes com os databases (acessos simultaneos no momento)
63 select * from pg_stat_activity;
64
65
66 # Tirar acentos
67 select translate('Opo', '',
68 'AEIOUaeiouAEIOUaeiouAEIOUaeiouAEIOUaeiouCc');
69
70
71 # Retornar registros randomicamente
72 select * from municipios order by random();
73

2 de 3 03/04/2014 16:17
PostgreSQL - Dicas Avanadas https://gist.github.com/claudioaccr/7792328

74
75 # Duplicar banco de dados
76 Basta criar um novo banco usuando o banco que dever ser clonado como template.
77 create database <novo_db> with template <antigo_db> encoding <charset>
78
79 # Habilitar e Desabilitar Triggers
80 ALTER TABLE [nome_tabela]
81 DISABLE TRIGGER [nome_trigger];
82
83 ALTER TABLE [nome_tabela]
84 ENABLE TRIGGER [nome_trigger];
85
86
87 # Restore de Dump a partir do pg_restore
88 pg_restore -d nome_banco_destino -U postgres /caminho/nome_arquivo_dump
89
90
91 # Gerando aspas simples e duplas
92 select chr(39) || 'texto' || chr(39) --aspas simples
93 select chr(34) || 'texto' || chr(34) --aspas duplas
94
95
96 # Usando Postgresql com Shell Script com arquivo de senha (3 passos)
97
98 1 - Criar arquivo .pgpass na home do usurio que usar o script
99 Exemplo: Usurio Fulano
100 vim /home/fulano/.pgpass
101
102 2 - Editar o contedo do arquivo (no pode haver espao entre os campos)
103 ip_do_servidor:porta:*:usuario_do_banco:senha_do_banco
104 Exemplo: localhost:5432:*:postgres:senha
105
106 3 - Definir as permisses para o arquivo de senha
107 chmod 600 /home/fulano/.pgpass
108
109
110 # Funes Left e Right
111 substring(campo from char_length(campo) - 3) -- Function Right(4)
112
113
114
115 -----
116
117 select dh_cadastro_oc, coalesce(total, 0) as total
118 from
119 (
120 select generate_series(0, date '2013-05-07' - date '2013-04-07' ) + date '2013-04-07' as dh_cadastro_oc
121 ) as x
122 left join
123 (
124 SELECT CAST(ocorrencias.DH_CADASTRO_OC AS DATE) as dh_cadastro_oc, COUNT (*) AS total
125 FROM ocorrencias
126 WHERE ocorrencias.DH_CADASTRO_OC>='07/04/2013' AND ocorrencias.DH_CADASTRO_OC<='07/05/2013'
127 -- AND ocorrencias.CD_MUNICIPIO_MU = '057'
128 GROUP BY CAST(ocorrencias.DH_CADASTRO_OC AS DATE)
129 ) as y
130 using (dh_cadastro_oc)

3 de 3 03/04/2014 16:17

Potrebbero piacerti anche