AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / 问题

Perguntas[plpgsql](dba)

Martin Hope
user3040157
Asked: 2022-10-22 00:15:31 +0800 CST

Como inserir "C:\" na coluna de texto, PL/pgSQL

  • 5

Atualmente estou enfrentando um problema estranho na minha consulta PL/pgSQL para inserir string na coluna de texto, vou explicar:

Tenho uma tabela com o seguinte esquema:

CREATE TABLE IF NOT EXISTS Loading_Info
            (
                ID SERIAL PRIMARY KEY ,
                Vendor_Loc VARCHAR(500),
                Dest_Loc VARCHAR(500)
);

Esta tabela conterá a localização do arquivo para carregamento de dados.

Minha consulta de inserção é a seguinte:

INSERT INTO Loading_Info
    (
      ID,
      Vendor_Loc,
      Dest_Loc
    )
    VALUES
    (
      '1',
      's3://ind-uat-ics/uat/telco/',
      'C:\ind-uat-ics\uat\telco\'
    );

    COMMIT;

Quando estou tentando executar esta consulta no SQL workbench, recebi o seguinte erro:

[Amazon](500310) Invalid operation: unterminated quoted string at or near "'C:\ind-uat-ics\uat\telco\',
        )"

Você tem alguma ideia de como inserir esses caracteres para serem considerados como string?

plpgsql
  • 1 respostas
  • 23 Views
Martin Hope
beehive
Asked: 2022-05-10 09:26:59 +0800 CST

gatilho postgresql --> função de gatilho --> cadeia de função de sub-gatilho

  • 0

Eu tenho uma função de gatilho complexa que desejo dividir em várias subfunções. O gatilho chamaria a função master e a função master teria lógica para decidir qual subfunção chamar. Isso é até onde eu cheguei:

create table dbo.thing (thingid int);
create table dbo.thingtwo (thingid int);

create or replace function dbo.tf2(thingid int) returns void as $$
    insert into dbo.thingtwo values (thingid);
$$ language sql; 

create or replace function dbo.tf1() returns trigger as $thinginsert$
begin    
    perform dbo.tf2(new.thingid);
    return null;
end;
$thinginsert$ language plpgsql; 

create trigger thinginsert
after insert on dbo.thing
for each row execute procedure dbo.tf1();

O problema é que eu quero passar tudo new.*para a segunda função de gatilho, não apenas algumas colunas. Em última análise, haveria lógica condicional dbo.tf1()para decidir se ir dbo.tf2()ou dbo.tf3()etc.

Como posso fazer isso funcionar?


Estou usando o Postgres 12.8.

postgresql plpgsql
  • 1 respostas
  • 32 Views
Martin Hope
igelr
Asked: 2021-12-27 11:49:29 +0800 CST

PostgreSQL: Como alternar o banco de dados dentro do script do cursor

  • 0

Eu quero escrever a função para o postgresql 10 para conceder acesso somente leitura a todos os bancos de dados para o usuário especificado (consideravelmente deve ser executado a partir do superusuário)

Mas tenho dificuldades na parte de troca de banco de dados. Eu tento alternar o banco de dados dentro de um cursor, mas recebo um erro que não consigo entender. Como posso corrigir meu script?

CONTEXTO: função PL/pgSQL inline_code_block em EXECUTE

DO $$
DECLARE query text;

cursor cursor
FOR
SELECT '\c '||datname ||';'  from pg_database;
BEGIN
OPEN cursor;
LOOP
    FETCH cursor INTO query;
    EXIT WHEN NOT FOUND;
    
    --raise notice 'Value: %',query;
    EXECUTE query;
END LOOP;
CLOSE cursor;
END $$;
postgresql plpgsql
  • 1 respostas
  • 621 Views
Martin Hope
Héctor
Asked: 2021-09-25 05:46:09 +0800 CST

SELECIONE linhas da tabela uma a uma, comparando os valores de uma coluna com os valores de uma matriz

  • 1

Eu tenho uma matriz de carimbos de data/hora em um bloco de código PLPGSQL: timestamp_array.

Para cada elemento de timestamp_arrayeu quero pegar o próprio elemento ( timestamp_element) e algumas colunas de uma tabela ( my_table) que também tem uma coluna timestamp, mas não quero pegar a coluna timestamp em si, mas sim o elemento timestamp array. A condição é que eu só queira obter uma linha da tabela para cada elemento da matriz, a correspondência mais próxima (no passado) entre os elementos de carimbo de data/hora na matriz e a coluna de carimbo de data/hora da tabela.

O que eu quero alcançar é algo como:

FOR EACH timestamp_element IN ARRAY timestamp_array
LOOP
  EXECUTE $EXE$
    SELECT my_table.some_other_columns...
    FROM my_table
    WHERE my_table.timestamp <= $1
    ORDER BY my_table.timestamp DESC
    LIMIT 1
  $EXE$
  USING timestamp_element
  INTO tmp_array;

  EXECUTE
    INSERT INTO temporary_table
    VALUES ($1, array_to_string($2, ', '))
  USING timestamp_element, tmp_array;
END LOOP;

Não sei se o código anterior está 100% correto, mas é apenas para tentar explicar melhor o que quero alcançar. E, obviamente, o objetivo seria fazer o trabalho com apenas uma consulta, em vez de uma consulta por elemento de matriz.

Para colocar como um caso prático, se eu tiver um my_table:

carimbo de data/hora Cola ...
2020-02-13 23:12:07 12 ...
27-03-2020 10:37:01 15 ...
14-06-2020 16:32:44 7 ...
14-06-2020 17:01:57 33 ...

Com um timestamp_array:

[
  2020-02-15 12:00:00,
  2020-03-22 00:00:00,
  2020-06-14 17:00:00
]

Eu gostaria do seguinte temporary_tablesem usar uma consulta independente para cada elemento da matriz:

carimbo de data/hora Cola ...
2020-02-15 12:00:00 12 ...
2020-03-22 00:00:00 12 ...
2020-06-14 17:00:00 7 ...
postgresql plpgsql
  • 1 respostas
  • 1457 Views
Martin Hope
guillermo_dangelo
Asked: 2021-09-09 07:03:02 +0800 CST

Escape % dentro da função FORMAT() no Postgres

  • 2

Estou tentando escapar de um caractere '%' dentro de uma função format() no PostgreSQL. A função substitui os valores das colunas com base em uma lista de colunas, excluindo retornos (\n) e aparando as strings.

CREATE OR REPLACE FUNCTION eliminar_retornos(text) RETURNS VOID
AS $$
        declare
            i text;
            fields text[] := ARRAY['direccion', 'localidad', 'calle', 'esq1', 'esq2', 'obs'];
        BEGIN
            FOREACH i IN ARRAY fields
            loop
                EXECUTE format(
                    'update %1$s set %2$s = trim(upper(replace(%2$s, E''\n'', '' '')))', $1, i)
                ;
            END LOOP;
        RAISE NOTICE 'Se actualizó la capa %', $1;
        END
        ;
$$ LANGUAGE plpgsql;

Eu quero mudar essa função para substituir apenas aquelas strings que tem retornos, usando algo como;

'update %1$s set %2$s = trim(upper(replace(%2$s, E''\n'', '' ''))) where %2$s LIKE E''%\n%''', $1, i) 

O problema é que não sei como escapar corretamente o '%' para o 'LIKE' dentro da função format().

Desculpe por postar algo não reproduzível, meu conhecimento é limitado para conseguir isso.

postgresql plpgsql
  • 1 respostas
  • 1022 Views
Martin Hope
Adam Mulla
Asked: 2021-08-04 06:23:09 +0800 CST

Como usar a exceção definida pelo usuário - Função PostgreSQL

  • 1

Você pode fornecer a sintaxe para usar a exceção definida pelo usuário na função PostgreSQL?

Suponha que eu queira lidar com a exceção definida pelo usuário.

SQL Error [22023]: ERROR: password is too short.

Existem vários códigos de erro SQLSTATE, mas não é possível encontrar qual é o código SQLSTATE para este erro. Usei acima que é 22023 mas não resolveu.

Temos abaixo o código que podemos gerenciar a exceção relacionada à violação exclusiva, mas não podemos gerenciar "a senha é muito curta". poderia me ajudar com a sintaxe?

Código:

begin
EXECUTE 'ALTER USER ' || $1 || ' WITH PASSWORD '''|| $2||'''' ;
        EXCEPTION WHEN "Password is too short" 
        THEN RAISE DETAIL 'Please check your password';
        
INSERT INTO pwdhistory (usename,password,changed_on) values($1,md5($2),now());
        EXCEPTION WHEN unique_violation 
        THEN RAISE DETAIL 'Password already used earlier. Please try again with another password.';

end;
postgresql plpgsql
  • 1 respostas
  • 1053 Views
Martin Hope
geeko
Asked: 2021-05-16 12:58:56 +0800 CST

Definir tipos compostos recursivos

  • 0

É possível definir tipos compostos recursivos no Postgres 13?

create type "t" as (
  "a" int,
  "b" t
);

Estou ciente de que posso usar uma tabela com um relacionamento pai-filho. A única desvantagem é que precisarei consultar cada nível aninhado em vez de acessar diretamente os dados aninhados.

Também estou ciente de que posso usar jsonb, mas não tenho certeza se ele pode acessar os dados aninhados diretamente sem consultar cada nível aninhado?

Quais são as outras alternativas usando apenas PL/pgSQL?

Eu preciso acessar cada nível aninhado separadamente.

postgresql plpgsql
  • 1 respostas
  • 141 Views
Martin Hope
user229251
Asked: 2021-05-07 02:26:36 +0800 CST

Acionar para evitar o valor da coluna de A para B e de B para A

  • 0

Estou tentando criar um gatilho que impeça que uma coluna seja atualizada da seguinte forma:

Se o valor da coluna for "A", ele não poderá ser atualizado para "B" e se o valor da coluna for "B", ele não poderá ser atualizado para "A" .

CREATE OR REPLACE FUNCTION cancelled_order()
    RETURNS trigger
    LANGUAGE plpgsql
AS $function$BEGIN
    IF OLD.status = 'Cancelled' THEN NEW.status != 'Accomplished';
    END IF;
    IF OLD.status = 'Accomplished' THEN NEW.status != 'Cancelled';
    END IF;
    RETURN NEW;
END;
$function$;

CREATE TRIGGER No_cancelled_acomplished
    BEFORE UPDATE OF status
    ON clinical.tb_orders
    EXECUTE PROCEDURE cancelled_order();

O erro que sai é:

Sintaxis error: != 

Alguma ideia, por quê?

postgresql plpgsql
  • 1 respostas
  • 39 Views
Martin Hope
pricha
Asked: 2021-03-26 12:15:35 +0800 CST

Como criar um agregado para encontrar o valor mínimo e máximo de uma coluna inteira e retornar a saída em formato de texto?

  • 1

Eu tenho uma função em que estou especificando a tabela e a coluna, mas preciso de um agregado que possa funcionar para qualquer tabela e coluna para uma saída semelhante

create function min_max_val()
returns text
 LANGUAGE plpgsql
 AS $$
  declare
  mmv text;
  begin
  select format('%s - %s',min(id),max(id) )min_max_vals into mmv from towns;
  return mmv;
 end;
$$ ;

    min_max_vals
---------------------
 1000001 - 11000000
postgresql plpgsql
  • 1 respostas
  • 126 Views
Martin Hope
Hedi Hadhri
Asked: 2021-03-13 23:35:36 +0800 CST

Problema com a função postgres

  • 0

Eu escrevi a seguinte função para consultar dados de tabelas e colunas que dou como argumentos:

create or replace function field_summaries(gap interval , _tbl anyelement, _col text)                                
 returns SETOF anyelement as 
 $func$   
 BEGIN
 RETURN QUERY EXECUTE
 'select                                                                                                                       
 time_bucket(' || gap || ', time)::text as hour,                                                                                      
 avg(' || _col ||'),                                                                                                          
 min(' || _col ||'),                                                                                                          
 max(' || _col ||')                                                                                                         
 from ' || pg_typeof(_tbl) || ' d                                                                                                         
 where d.device_id in (                                                                                                       
     select device_id from sensors)                                                                                           
     group by hour';
 END
 $func$ language sql stable;  

O problema é que ao chamar a função assim:

select field_summaries('5minutes', NULL:: m_13, 'temperature');   

Eu recebo o seguinte erro:

ERROR:  syntax error at or near ":"  
LINE 2:  time_bucket(00:05:00, time)::text as hour,                 ...                                                                           
                       ^                                                                                                   
QUERY:  select                                                                                                                                                                                                                                         
time_bucket(00:05:00, time)::text as hour,                                                                                                                                                                                                            
avg(temperature),                                                                                                                                                                                                                                     
min(temperature),                                                                                                                                                                                                                                     
max(temperature)                                                                                                           
from m_13 d                                                                                                                
where d.device_id in (                                                                                                                                                                                                                                    
select device_id from sensors)                                                                                                                                                                                                                        
group by hour                                                                                                         
CONTEXT:  PL/pgSQL function field_summaries(interval,anyelement,text) line 3 at RETURN QUERY

Alguém tem ideia do que pode ser isso?

postgresql plpgsql
  • 2 respostas
  • 135 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve