Como Ganhar Dinheiro… Para Descontrair
Você sabe como ganhar dinheiro com Informática?
R. Trabalhando direito
Você sabe como ganhar dinheiro como Advogado?
R. Trabalhando errado
Você sabe como ganhar dinheiro como Professor?
R. Não ganha dinheiro como professor.
..
Retorno de apenas números de uma String – PostgreSQL
Certo dia, precisei retornar apenas números de uma determinada string que existia Caracteres e números. Como eu não sou Expert em Expressões Regulares (Apenas Arranho), procurei usar algumas funções disponíveis no PostgreSQL (Preferência para Versão 8.4 em diante).
Exemplo:
– Tabela Simples
CREATE TABLE t1 (texto TEXT) ;
– Insert com Registro Incluindo Caracteres e Números
INSERT INTO t1 (texto) VALUES ('1a*(&¨$$#@2b3c4d6__66+++§§§66') ;
– Query Retornando Apenas Números
SELECT ARRAY_TO_STRING(ARRAY_AGG(texto_mod), '') AS "Com Array_to_String",
TRANSLATE(ARRAY_AGG(texto_mod)::text, '{},', '') AS "Com Translate"
FROM ( SELECT SUBSTRING(REGEXP_SPLIT_TO_TABLE(texto, ''), '[0-9]') AS texto_mod
FROM t1 ) foo
WHERE texto_mod IS NOT NULL ;
– Resultado
Com Array_to_String | Com Translate
---------------------+---------------
123466666 | 123466666
(1 row)
Abraço!
A Criação do Mundo
Então DEUS disse:
[deus@ ~]# tar -zxvf universo-0.1.tar.gz ; cd universo-0.1 ; ./configure –nodeps && make && make install
[deus@ ~]# tar -zxvf planetas-0.1.tar.gz ; cd planetas-0.1 ; ./configure –prefix=terra && make && make install
PS. Cuidado! Tudo fica na MEMÓRIA!!!
Migrar PostgreSQL84 Para PostgreSQL90 Usando pg_upgrade
Bem, como instalo o PostgreSQL via Repositório (Yum), O procedimento abaixo pode aparentar ser redudante, mas preferi compilar o PostgreSQL90 antes para realizar a migração e somente depois re-instalar com Yum. O processo de Compilação pode ser substituido pelos pacotes RPM distribuídos na REDE.
Minha situação:
Servidor instalado PostgreSQL84 via Repositório em uma Distro Fedora Core 12
1. Baixar PostgreSQL90
wget -c http://wwwmaster.postgresql.org/redir/378/f/source/v9.0.0/postgresql-9.0.0.tar.gz
2. Descompactar
tar zxfv postgresql-9.0.0.tar.gz
3. Compilar e Instalar
./configure
gmake ou make
gmake install ou make install
4. Compilar e Instalar Contribs Principalmente pg_upgrade e pg_upgrade_support.so
cd contrib
make
cd pg_upgrade
make install
cd ../pg_upgrade_support
make install
5. Stop PostgreSQL84
service postgresql stop
6. Criar Diretórios Para Inicialização. Os passos a seguir são responsáveis para manter a base de dados antiga (84) e criar a base de dados nova (90) para realização do UPGRADE. Crio um link para o usuário postgres não perder seu HOME. Mesmo sendo de outra versão ele não irá apresentar problemas.
mkdir /usr/local/pgsql/data
cd /var/lib
mv pgsql pgsql.84
ln -s /usr/local/pgsql/ pgsql
chown -R postgres:postgres /usr/local/pgsql
su – postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
7. UPGRADE
export OLDDATADIR=/var/lib/pgsql.84/data # Old Data
export NEWDATADIR=/var/lib/pgsql/data # New Data
export OLDBINDIR=/usr/bin # Old Bin
export NEWBINDIR=/usr/local/pgsql/bin/ # New Bin
/usr/local/pgsql/bin/pg_upgrade -c -v # Check pg_upgrade verbose
/usr/local/pgsql/bin/pg_upgrade -v # pg_upgrade verbose
RESULTADO:
Upgrade complete
—————-
| Optimizer statistics is not transferred by pg_upgrade
| so consider running:
| vacuumdb –all –analyze-only
| on the newly-upgraded cluster.
| Running this script will delete the old cluster’s data files:
| /usr/local/pgsql/delete_old_cluster.sh
8. Reinstalando PostgreSQL90 via Repositório
Baixar Repositorio Mediante Distro. No meu caso, Fedora.
http://yum.pgrpms.org/reporpms/repoview/letter_p.group.html
9. Instalo Repositório e depois Atualizo o PostgreSQL84 para PostgreSQL90 Via Repositório Yum. Faço uma cópia (Poderia mover logo também) da base de diretório migrada (UPGRADED) para o diretório DEFAULT do PostgreSQL.
rpm -ivh pgdg-fedora-9.0-2.noarch.rpm
rm -f /var/lib/pgsql
yum install postgresql postgresql-contrib postgresql-dbi-link postgresql-plperl postgresql-libs postgresql-server
cp -av /usr/local/pgsql/9.0 /var/lib/pgsql/
10. Copiar Arquivos de Configuração do PostgreSQL84 Para New PostgreSQL90 . tomar cuidado com configurações específicas que podem mudar de uma versão para outra. No meu caso, as alterações são básicas e não afetam o funcionamento nem a inicialização do Cluster.
cp -av ${OLDDATADIR}/pg_hba.conf /var/lib/pgsql/9.0/data/
cp -av ${OLDDATADIR}/postgresql.conf /var/lib/pgsql/9.0/data/
11. Start PostgreSQL90. O PostgreSQL90 instala seus arquivos no mesmo local da versão anterior, mas com um diretório versionado 9.0, seus binários também vão estar em um diretório a parte dentro de /usr/pgsql-9.0 . O Service deverá chamar postgresql-9.0 como informado abaixo.
service postgresql-90 start
/usr/pgsql-9.0/bin/psql -l
OBS: Caso Voce trabalhe com tablespaces fora do diretótio “data” lembrar de Criar/Alterar as tablespaces no PostgreSQL90 pois o pg_upgrade apenas cria links para os diretorios. Caso você queira apagar o diretório do PostgreSQL84
12. Rodar Vacuumdb
/usr/pgsql-9.0/bin/vacuumdb –all –analyze-only –verbose
ou
/usr/pgsql-9.0/bin/vacuumdb –all –full –verbose
Maiores Informações Leia a Documentação:
http://developer.postgresql.org/pgdocs/postgres/pgupgrade.html
Abraço a todos!
Entre Datas com date_trunc() – PostgreSQL
Vejo que em muitos relatórios, precisamos trazer dados entre duas datas distintas, onde essas datas equivale a um mês inteiro muitas vezes.
Uma forma rápida de fazer isso seria usar a funcao date_trunc() do postgreSQL.
Considerando que estamos no mês de Agosto.
# Mês atual
SELECT date_trunc(‘month’, CURRENT_DATE) AS inicio_mes,
date_trunc(‘month’, CURRENT_DATE) + ’1 month’::interval – ’1 day’::interval AS fim_mes;
2010-08-01 00:00:00-03 | 2010-08-31 00:00:00-03
# Mês anterior
SELECT date_trunc(‘month’, CURRENT_DATE) – ’1 month’::interval AS inicio_mes,
date_trunc(‘month’, CURRENT_DATE) – ’1 day’::interval AS fim_mes;
2010-07-01 00:00:00-03 | 2010-07-31 00:00:00-03
Abraço a todos.
Função para validar Cpf/Cnpj – PostgreSQL
Bem pessoal, sempre acho que em vez de copiar podemos desenvolver. então, ao invés de pegar algo pronto, pensei em criar minha própria função para realizar essa checagem.
Deverá ser passado como parametro o número do Cpf ou do Cnpj, com ou sem máscara.
Bem, ai está!!
poxa, a função é enorme!!! Mais funciona!
CREATE OR REPLACE FUNCTION fn_cnpj_cpf(text)
RETURNS boolean AS
$BODY$
DECLARE
v_string text := $1;
v_caldv1 int4;
v_caldv2 int4;
v_dv1 int4;
v_dv2 int4;
v_array1 text[] ;
v_array2 text[] ;
v_tst_string int4;
BEGIN
v_string := translate(v_string, './-', '');
IF (char_length(v_string)::int4) = 14 THEN
SELECT INTO v_array1 '{5,4,3,2,9,8,7,6,5,4,3,2}';
SELECT INTO v_array2 '{6,5,4,3,2,9,8,7,6,5,4,3,2}';
v_dv1 := (substring(v_string, 13, 1))::int4;
v_dv2 := (substring(v_string, 14, 1))::int4;
/* COLETA DIG VER 1 CNPJ */
v_caldv1 := 0;
FOR va IN 1..12 LOOP
v_caldv1 := v_caldv1 + ((SELECT substring(v_string, va, 1))::int4 * (v_array1[va]::int4));
END LOOP;
v_caldv1 := v_caldv1 % 11;
IF (v_caldv1 = 0) OR (v_caldv1 = 1) THEN
v_caldv1 := 0;
ELSE
v_caldv1 := 11 - v_caldv1;
END IF;
/* COLETA DIG VER 2 CNPJ */
v_caldv2 := 0;
FOR va IN 1..13 LOOP
v_caldv2 := v_caldv2 + ((SELECT substring(v_string || v_caldv1::text, va, 1))::int4 * (v_array2[va]::int4));
END LOOP;
v_caldv2 := v_caldv2 % 11;
IF (v_caldv2 = 0) OR (v_caldv2 = 1) THEN
v_caldv2 := 0;
ELSE
v_caldv2 := 11 - v_caldv2;
END IF;
/* TESTA */
IF (v_caldv1 = v_dv1) AND (v_caldv2 = v_dv2) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
ELSIF (char_length(v_string)::int4) = 11 THEN
v_dv1 := (substring(v_string, 10, 1))::int4;
v_dv2 := (substring(v_string, 11, 1))::int4;
v_string := substring(v_string, 1, 9);
/* COLETA DIG VER 1 CPF */
v_caldv1 := 0;
FOR va IN 1..9 LOOP
v_caldv1 := v_caldv1 + ((SELECT substring(v_string, va, 1))::int4 * (11 - va));
END LOOP;
v_caldv1 := v_caldv1 % 11;
IF (v_caldv1 = 0) OR (v_caldv1 = 1) THEN
v_caldv1 := 0;
ELSE
v_caldv1 := 11 - v_caldv1;
END IF;
/* COLETA DIG VER 2 CPF */
v_caldv2 := 0;
FOR va IN 1..10 LOOP
v_caldv2 := v_caldv2 + ((SELECT substring((v_string || v_caldv1::text), va, 1))::int4 * (12 - va));
END LOOP;
v_caldv2 := v_caldv2 % 11;
IF (v_caldv2 = 0) OR (v_caldv2 = 1) THEN
v_caldv2 := 0;
ELSE
v_caldv2 := 11 - v_caldv2;
END IF;
/* TESTA */
IF (v_caldv1 = v_dv1) AND (v_caldv2 = v_dv2) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END IF;
RETURN FALSE;
END;
$BODY$
LANGUAGE 'plpgsql' IMMUTABLE
COST 100;
Sejam Bem Vindos
Olá a todos!
Esse blog tratará de assuntos relacionados a tecnologia. Servidores, Banco de Dados, Programação e outros.
Obrigado pelo acesso!