Articles of plpgsql

Truncar todas as tabelas em um database Postgres

Eu regularmente preciso excluir todos os dados do meu database PostgreSQL antes de uma reconstrução. Como eu faria isso diretamente no SQL? No momento, consegui criar uma instrução SQL que retorna todos os comandos que preciso executar: SELECT ‘TRUNCATE TABLE ‘ || tablename || ‘;’ FROM pg_tables WHERE tableowner=’MYUSER’; Mas não consigo ver uma maneira […]

Diferença entre o idioma sql e o idioma plpgsql nas funções do PostgreSQL

Sou muito novo no desenvolvimento de database, por isso tenho algumas dúvidas sobre o meu exemplo a seguir: Função f1 () – linguagem sql create or replace function f1(istr varchar) returns text as $$ select ‘hello! ‘::varchar || istr; $$ language sql; Função f2 () – linguagem plpgsql create or replace function f2(istr varchar) returns […]

O que é ‘$$’ usado em PL / pgSQL?

Sendo completamente novo para PL / pgSQL, qual é o significado de sinais de dólar duplo nesta function : CREATE OR REPLACE FUNCTION check_phone_number(text) RETURNS boolean AS $$ BEGIN IF NOT $1 ~ e’^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$’ THEN RAISE EXCEPTION ‘Wrong formated string “%”. Expected format is +999 999’; END IF; RETURN true; END; $$ […]

INSERIR com nome da tabela dinâmica na function de gatilho

Não sei como conseguir algo como o seguinte: CREATE OR REPLACE FUNCTION fnJobQueueBEFORE() RETURNS trigger AS $$ DECLARE shadowname varchar := TG_TABLE_NAME || ‘shadow’; BEGIN INSERT INTO shadowname VALUES(OLD.*); RETURN OLD; END; $$ LANGUAGE plpgsql; Ou seja, inserindo valores em uma tabela com um nome gerado dinamicamente. A execução do código acima produz: ERROR: relation […]

O operador de atribuição esquecido “=” e o comum “: =”

A documentação do PL / pgSQL diz que a declaração e atribuição a variables ​​é feita com := . Mas um simples, mais curto e mais moderno (veja nota de rodapé) = parece funcionar como esperado: CREATE OR REPLACE FUNCTION foo() RETURNS int AS $$ DECLARE i int; BEGIN i = 0; WHILE NOT i […]

SELECT ou INSERT está em uma function propensa a condições de corrida?

Eu escrevi uma function para criar posts para um simples mecanismo de blogging: CREATE FUNCTION CreatePost(VARCHAR, TEXT, VARCHAR[]) RETURNS INTEGER AS $$ DECLARE InsertedPostId INTEGER; TagName VARCHAR; BEGIN INSERT INTO Posts (Title, Body) VALUES ($1, $2) RETURNING Id INTO InsertedPostId; FOREACH TagName IN ARRAY $3 LOOP DECLARE InsertedTagId INTEGER; BEGIN — I am concerned about […]

Refatore uma function PL / pgSQL para retornar a saída de várias consultas SELECT

Eu escrevi uma function que gera uma consulta SELECT PostgreSQL bem formada em forma de texto. Agora eu não quero mais dar saída a um texto, mas, na verdade, executo a SELECT gerada contra o database e retorno o resultado – exatamente como a consulta em si. O que eu tenho até agora: CREATE OR […]

Nome da tabela como um parâmetro de function do PostgreSQL

Eu quero passar um nome de tabela como um parâmetro em uma function do Postgres. Eu tentei este código: CREATE OR REPLACE FUNCTION some_f(param character varying) RETURNS integer AS $$ BEGIN IF EXISTS (select * from quote_ident($1) where quote_ident($1).id=1) THEN return 1; END IF; return 0; END; $$ LANGUAGE plpgsql; select some_f(‘table_name’); E eu tenho […]