Skip to content

Instantly share code, notes, and snippets.

@sebastianwebber
Last active May 4, 2016 03:30
Show Gist options
  • Select an option

  • Save sebastianwebber/b7987be88c44039c91611acaf07068ad to your computer and use it in GitHub Desktop.

Select an option

Save sebastianwebber/b7987be88c44039c91611acaf07068ad to your computer and use it in GitHub Desktop.
Exemplo PL pra gerar DELETE das tabelas de auditoria Baseado em data
# gera o arquivo com as instruções
psql -c "SELECT * FROM fnc_apaga_auditoria('2015-01-01','auditoria')" -At > meu_arquivo.sql
## $ cat meu_arquivo.sql
## -- Table auditoria.foo
## DELETE FROM auditoria.foo WHERE dtinc <= '2015-01-01';
## VACUUM FULL auditoria.foo;
##
## -- Table auditoria.bar
## DELETE FROM auditoria.bar WHERE dtinc <= '2015-01-01';
## VACUUM FULL auditoria.bar;
# executa o arquivo gerado.
psql -f meu_arquivo.sql
-- Exemplo PL pra gerar DELETE das tabelas de auditoria Baseado em data
DROP FUNCTION IF EXISTS fnc_apaga_auditoria(pdDataInicioDelete DATE,pcNomeSchema VARCHAR );
CREATE OR REPLACE FUNCTION fnc_apaga_auditoria(pdDataInicioDelete DATE,pcNomeSchema VARCHAR )
RETURNS SETOF TEXT AS
$$
DECLARE
rTabela RECORD;
BEGIN
FOR rTabela IN
SELECT
tablename,
schemaname,
'DELETE FROM ' || schemaname || '.' || tablename ||
' WHERE dtinc <= ' || QUOTE_LITERAL(pdDataInicioDelete) || ';' AS sql_query
FROM pg_tables
WHERE schemaname = pcNomeSchema
LOOP
RETURN NEXT '-- Table ' || rTabela.schemaname || '.' || rTabela.tablename;
RETURN NEXT rTabela.sql_query;
RETURN NEXT 'VACUUM FULL ' || rTabela.schemaname || '.' || rTabela.tablename || ';';
RETURN NEXT '';
END LOOP;
END;
$$ LANGUAGE 'plpgsql';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment