Articles of plpgsql

Matriz de unnest em um nível

Eu quero ter uma matriz de n dimensões e retornar conjunto contendo linhas de matrizes de dimensões n-1 . Por exemplo, pegue a matriz ARRAY[[1,2,3], [4,5,6], [7,8,9]] e retorne um conjunto {1,2,3}, {4,5,6}, {7,8,9} . Usando unnest retorna o conjunto 1,2,3,4,5,6,7,8,9 . Eu tentei pegar a function unnest do PostgreSQL 8.4, que parece que faria […]

Como faço grandes atualizações sem bloqueio no PostgreSQL?

Eu quero fazer uma grande atualização em uma tabela no PostgreSQL, mas não preciso que a integridade transacional seja mantida em toda a operação, porque sei que a coluna que estou alterando não será gravada ou lida durante a operação. a atualização. Eu quero saber se existe uma maneira fácil no console do psql para […]

Registro retornado da function possui colunas concatenadas

Eu tenho uma tabela que armazena as alterações de conta ao longo do tempo. Eu preciso juntar isso com duas outras tabelas para criar alguns registros para um dia específico, se esses registros já não existirem. Para tornar as coisas mais fáceis (espero), encapsulei a consulta que retorna os dados históricos corretos em uma function […]

Gerar dinamicamente colunas para crosstab no PostgreSQL

Estou tentando criar consultas de crosstab no PostgreSQL, de modo que ele gere automaticamente as colunas de crosstab vez de codificá-las. Escrevi uma function que gera dinamicamente a lista de colunas que preciso para minha consulta de crosstab . A ideia é replace o resultado dessa function na consulta de crosstab usando sql dynamic. Eu […]

Retorna o set de registro (tabela virtual) da function

Eu preciso de uma function do Postgres para retornar uma tabela virtual (como no Oracle) com conteúdo personalizado. A tabela teria 3 colunas e um número desconhecido de linhas. Eu simplesmente não consegui encontrar a syntax correta na internet. Imagina isto: CREATE OR REPLACE FUNCTION “public”.”storeopeninghours_tostring” (numeric) RETURNS setof record AS DECLARE open_id ALIAS FOR […]

Executar uma consulta de tabela de referência cruzada dinâmica

Implementei esta function na minha base de dados do Postgres: http://www.cureffi.org/2013/03/19/automatically-creating-pivot-table-column-names-in-postgresql/ Aqui está a function: create or replace function xtab (tablename varchar, rowc varchar, colc varchar, cellc varchar, celldatatype varchar) returns varchar language plpgsql as $$ declare dynsql1 varchar; dynsql2 varchar; columnlist varchar; begin — 1. retrieve list of column names. dynsql1 = ‘select string_agg(distinct […]

Loop over array dimension em plpgsql

Em plpgsql, quero obter o conteúdo da matriz, um por um, a partir de uma matriz de duas dimensões. DECLARE m varchar[]; arr varchar[][] := array[[‘key1′,’val1’],[‘key2′,’val2’]]; BEGIN for m in select arr LOOP raise NOTICE ‘%’,m; END LOOP; END; Mas o código acima retorna: {{key1,val1},{key2,val2}} em uma linha. Eu quero ser capaz de fazer um […]

PostgreSQL IF statement

Como posso fazer essa consulta no Postgres? IF (select count(*) from orders) > 0 THEN DELETE from orders ELSE INSERT INTO orders values (1,2,3);

PL / pgSQL verificando se existe uma linha

Estou escrevendo uma function em PL / pgSQL, e estou procurando a maneira mais simples de verificar se existe uma linha. Agora eu estou selecionando um integer em um boolean , o que realmente não funciona. Eu ainda não tenho experiência com PL / pgSQL para saber a melhor maneira de fazer isso. Aqui está […]

Agrupar por e valores numéricos sequenciais agregados

Usando o PostgreSQL 9.0. Digamos que eu tenha uma tabela contendo os campos: company , profession e year . Quero retornar um resultado que contenha empresas e profissões exclusivas, mas agrega (em uma matriz é bom) anos com base na sequência numérica: Tabela de exemplo: +—————————–+ | company | profession | year | +———+————+——+ | […]