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.

.. :)

CategoriasPessoal

Retorno de apenas números de uma String – PostgreSQL

2011/01/03 2 comentários

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!!!

CategoriasPessoal

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

2010/08/31 2 comentários

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.

CategoriasPostgreSQL

Função para validar Cpf/Cnpj – PostgreSQL

2010/08/25 3 comentários

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;

CategoriasPostgreSQL

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!

CategoriasUncategorized
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.