Mostrando postagens com marcador PostgreSQL. Mostrar todas as postagens
Mostrando postagens com marcador PostgreSQL. Mostrar todas as postagens

quinta-feira, 18 de março de 2021

PostgreSQL - XML Pretty Function

PostgreSQL - XML Pretty Function


create extension if not exists xml2;

drop function if exists fnc_xml_pretty(pXML xml) cascade;

create or replace function fnc_xml_pretty(pXML xml) returns xml as
$body$
declare
  vRetorno xml;
begin

  vRetorno := xslt_process(pXML::text, '
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:strip-space elements="*" />
      <xsl:output method="xml" indent="yes" />
      <xsl:template match="node() | @*">
        <xsl:copy>
          <xsl:apply-templates select="node() | @*" />   
        </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>
    ');

  return vRetorno;

end;
$body$
language 'plpgsql' immutable strict;

--select fnc_xml_pretty('<root><a><b>some text</b></a></root>');

--Reference: https://postgres.cz/wiki/PostgreSQL_SQL_Tricks#Pretty_xml_formating

terça-feira, 1 de outubro de 2019

Habilitar o Python no PostgreSQL


  • Cenário

Windows 10
PostgreSQL 9.5 (instalado em C:\Program Files\PostgreSQL\9.5)
Python 3.7.4 - Windows x86-64 executable installer (python-3.7.4-amd64.exe - instalado em C:\Python\Python37)

  • Problema 1

Ao executar o comando:

create extension plpython3u;

Ocorre o erro:

ERROR:  could not load library "C:/Program Files/PostgreSQL/9.5/lib/plpython3.dll": unknown error 126

segunda-feira, 4 de março de 2019

Função para validação do CNS (Cartão Nacional de Saúde)


drop function if exists fnc_valida_cns_aux(pNumero text);

create or replace function fnc_valida_cns_aux(pNumero text) returns int as 
$body$
declare
  vArray char[];
  vSoma int;
  vNum int;
  vNum2 int;
begin

  vArray := regexp_split_to_array(pNumero, '');
  vSoma := 0;
  
  for i in array_lower(vArray, 1) .. array_length(vArray, 1) loop  
    vNum := vArray[i];
    vNum2 := 15 - i + 1;
    vSoma := vSoma + (vNum * vNum2);    
  end loop;        

  return vSoma;

end;
$body$
language 'plpgsql';

drop function if exists fnc_valida_cns_def(pCNS text); 

create or replace function fnc_valida_cns_def(pCNS text) returns boolean as 
$body$
declare
  vPIS text;
  vSoma int;
  vResto int;
  vDV int;
  vResultado text;
  vRetorno boolean;  
begin

  vPIS := substring(pCNS, 1, 11);
  vSoma := fnc_valida_cns_aux(vPIS);
  vResto := mod(vSoma, 11);  
  vDV := 11 - vResto;
  
  if vDV = 11 then
    vDV := 0;
  end if;
  
  if vDV = 10 then
    vSoma := fnc_valida_cns_aux(vPIS) + 2;
    vResto := mod(vSoma, 11);  
    vDV := 11 - vResto;  
    vResultado := vPIS || '001' || cast(vDV as text);
  else
    vResultado := vPIS || '000' || cast(vDV as text);
  end if;
  
  vRetorno := pCNS = vResultado; 
  return vRetorno;

end;
$body$
language 'plpgsql';

drop function if exists fnc_valida_cns_prov(pCNS text); 

create or replace function fnc_valida_cns_prov(pCNS text) returns boolean as 
$body$
declare
  vSoma int;
  vResto int;
  vRetorno boolean;  
begin

  vSoma := fnc_valida_cns_aux(pCNS);
  vResto := mod(vSoma, 11);
  
  vRetorno := vResto = 0; 
  return vRetorno;

end;
$body$
language 'plpgsql';

drop function if exists fnc_valida_cns(pCNS text); 

create or replace function fnc_valida_cns(pCNS text) returns boolean as 
$body$
declare
  vRetorno boolean;
  vCNS text;
begin

  vRetorno := false;
  
  vCNS := substring(regexp_replace(pCNS, '[^0-9]+', '', 'g'), 1, 15);
 
  if length(vCNS) = 15 then
  
    if substring(vCNS, 1, 1) in ('1', '2') then
      vRetorno := fnc_valida_cns_def(vCNS);
    elsif substring(vCNS, 1, 1) in ('7', '8', '9') then
      vRetorno := fnc_valida_cns_prov(vCNS);
    end if;
  
  end if;

  return vRetorno;

end;
$body$
language 'plpgsql';


Referências:

http://esusab.github.io/integracao/ledi/regras/algoritmo_CNS.html
http://www.yanaga.com.br/2012/06/validacao-do-cns-cartao-nacional-de.html

terça-feira, 29 de março de 2016

Implementação de um software para apoio logístico com estudo de localização geográfica

Venho aqui compartilhar o documento e a apresentação do trabalho de conclusão de curso sobre "Implementação de um software para apoio logístico com estudo de localização geográfica" apresentado na conclusão da graduação em Sistemas de Informação.





Implementação de um software para apoio logístico com estudo de localização geográfica


terça-feira, 15 de março de 2016

Função Slug PostgreSQL

Hoje irei dar um exemplo de criação de função de slug no PostgreSQL:

--select fnc_slug('Minha URL utilizando a função slug')
CREATE OR REPLACE FUNCTION promocoes.fnc_slug(pTexto varchar) RETURNS varchar AS
$body$
declare
  vSlug varchar;
begin
  vSlug := pTexto;

  /*
  vSlug := replace(vSlug , 'æ', 'ae');
  vSlug := replace(vSlug , 'œ', 'oe');
  vSlug := replace(vSlug , '€', 'euros');
  vSlug := replace(vSlug , '$', 'dollars');
  vSlug := replace(vSlug , '£', 'pound');
  vSlug := replace(vSlug , '¥', 'yen');

  vSlug := replace(vSlug, 'U$', 'dolares');
  vSlug := replace(vSlug, 'R$', 'reais');
  */

  vSlug := regexp_replace(translate(replace(lower(vSlug), ' ', '-'),
            'áàâãäå???ÁÂÃÄÅ???èééêë????????É??ìíîïì???ÌÍÎÏÌ???óôõö???ÒÓÔÕÖ???ùúûü????ÙÚÛÜ????çÇÿ&,.ñÑ',
            'aaaaaaaaaaaaaaaaaeeeeeeeeeeeeeeeeiiiiiiiiiiiiiiiiooooooooooooooouuuuuuuuuuuuuuuuccy_--nn'), E'[^\\w -]', '', 'g');

  while position('--' in vSlug) > 0 loop
    vSlug := replace(vSlug , '--', '-');
  end loop;

  return vSlug;

end;
$body$
LANGUAGE 'plpgsql'

sexta-feira, 15 de junho de 2012

Criando Auditoria de Tabelas no PostgreSQL

Hoje irei dar um exemplo de criação auditoria de tabelas no PostgreSQL.

A ideia deste exemplo de auditoria é utilizar uma única função de trigger para auditar N tabelas, ou seja, toda trigger de auditoria em qualquer tabela irá chamar sempre a mesma função de trigger para auditá-la, o que facilita manutenção da rotina de auditoria e possibilita manter um padrão de auditoria.

sexta-feira, 14 de outubro de 2011

Criando um Banco de Dados no PostgreSQL no Windows

Hoje irei falar sobre a criação de um Banco de Dados no PostgreSQL no Windows.


Existe várias maneiras/meios de se criar um banco de dados. Dentre elas irei falar sobre:
  • pgAdmin;
  • SQL Shell (psql);
  • createdb;

quinta-feira, 29 de setembro de 2011

Configurando Variáveis de Ambiente para o PostgreSQL no Windows

Hoje irei falar sobre a configuração de variáveis de ambiente para o PostgreSQL no Windows.

O post será dividido em 2 partes:
  • Acessando as Propriedades do Sistema;
  • Configurando as Variáveis de Ambiente;

quarta-feira, 31 de agosto de 2011

Instalando o PostgreSQL no Windows

Hoje irei falar sobre a instalação do PostgreSQL no Windows. Pretendo que este post possa servir como um tutorial que descreva passo a passo como instalar o PostgreSQL no Windows.


Neste tutorial iremos descrever a instalação do PostgreSQL 9.0.4-1, que pode ser baixado através de sua página oficial: http://www.postgresql.org/, onde, também é possível encontrar sua documentação, outras informações, etc.

sábado, 30 de julho de 2011

quinta-feira, 28 de julho de 2011

quarta-feira, 27 de julho de 2011

Configurando Slony-I com PostgreSQL no Windows - Parte 1

Olá pessoal, sejam bem vindos ao Blog. Este é meu primeiro post neste Blog e espero que gostem.

Quando se trata do primeiro post, logo vem em mente a questão: "O que postar no primeiro post?". Então para começar resolvi postar um tutorial que fiz há algum tempo atrás.

Constantemente procurava na internet como montar uma replicação que realmente funcionasse com o Slony no Windows, porém não achava nada que funcionasse realmente. Então fui a luta, após muitos testes e pegando um pouco do que cada artigo que encontrava na internet falava, consegui montar a replicação. Sendo assim montei este pequeno e bem simples tutorial de como se fazer a replicação de dados utilizando o Slony no Windows.

 Bom, chega de história e vamos por a mão na massa. Neste tutorial foram utilizados:
  • PostgreSQL 8.2.5;
  • Slony-I 1.2.11;
  • pgAdmin III.