Articles of plpgsql

PostgreSQL parametrizado por ordem / limite na function de tabela

Eu tenho uma function sql que faz uma instrução simples de seleção de SQL: CREATE OR REPLACE FUNCTION getStuff(param character varying) RETURNS SETOF stuff AS $BODY$ select * from stuff where col = $1 $BODY$ LANGUAGE sql; Por enquanto estou invocando essa function assim: select * from getStuff(‘hello’); Quais são minhas opções se eu precisar […]

Desdobrar várias matrizes em paralelo

Minha última pergunta Passar uma matriz para armazenar para postgres foi um pouco incerto. Agora, para esclarecer meu objective: Eu quero criar um procedimento armazenado Postgres que aceitará dois parâmetros de input. Uma será uma lista de alguns valores, como por exemplo (100, 40.5, 76) e a outra será a lista de algumas faturas (’01-2222-05′,’01-3333-04′,’01-4444-08′) […]

Definir nomes de tabelas e colunas como argumentos em uma function plpgsql?

Deve ser simples, mas estou dando os primeiros passos nas funções do Postgres e não consigo encontrar nada que funcione … Eu gostaria de criar uma function que irá modificar uma tabela e / ou coluna e não consigo encontrar o caminho certo para especificar minhas tabelas e colunas como argumentos em minha function. Algo […]

Como definir o valor do campo de variável composta usando SQL dynamic

Dado este tipo: — Just for testing purposes: CREATE TYPE testType as (name text) Eu posso obter o valor de um campo dinamicamente com esta function: CREATE OR REPLACE FUNCTION get_field(object anyelement, field text) RETURNS text as $BODY$ DECLARE value text; BEGIN EXECUTE ‘SELECT $1.”‘ || field || ‘”‘ USING object INTO value; return value; […]

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 […]