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 / 问题

All perguntas(dba)

Martin Hope
sujeet
Asked: 2023-12-14 10:46:08 +0800 CST

Indexando coluna JSON inteira versus indexando campo JSON específico no PostgreSQL

  • 7

Eu tenho uma tabela PostgreSQL nomeada item_logcom uma logcoluna do tipo jsonbque contém vários atributos. Um desses atributos é delete_log. Estou consultando esta tabela com base no created_atcampo e na presença de non-nullvalores no delete_logatributo.

SELECT item_id
FROM item_log
WHERE created_at >= CURRENT_DATE - INTERVAL '15 days'
  AND (log->>'delete_log') IS NOT NULL;

Estou considerando diferentes estratégias de indexação para otimizar minhas consultas:

Aqui está o que eu tentei,

Índice criado emcreated_at : A consulta ficou mais rápida quando não coloquei (log->>'delete_log') IS NOT NULLna consulta a condição esperada. Assim que coloquei essa condição ou mesmo selecionei esse campo demorou em torno de 40 minutos.

Acho que a lentidão da consulta ocorre devido à inclusão do delete_log. Quando este campo é consultado, ele inicia a leitura da TOASTtabela e realiza deTOASToperações, o que aumenta significativamente o tempo de I/O.

Agora, para otimizar a consulta, tenho algumas opções:

  • Adicionar índice composto em(created_at, log->>delete_log)
  • Adicionar índice (log->>delete_log)porque já tenho índice ativado created_at?

Além disso, tenho outra confusão.

  • Que tipo de índice devo escolher log->>delete_log?
  • E como isso difere da indexação de todo o logcampo em termos de desempenho ou armazenamento para a consulta acima?
postgresql
  • 2 respostas
  • 40 Views
Martin Hope
Luis Avalos
Asked: 2023-12-13 23:52:32 +0800 CST

Como usar sp_execute_external_script para buscar USD Rate de uma API e atualizar uma tabela?

  • 5

Eu tenho esse código que dá esse erro

-- Set the API URL
SET @url = 'https://www.banxico.org.mx/SieAPIRest/service/v1/series/SF43718/dato/oportuno?token=734b37b3a5099a9d2d39d06478d47e359a9568cd6693116d95b710e6b8be0008';

-- Use built-in SQL Server functions to make HTTP request and obtain response
-- Requires SQL Server 2016 or later
DECLARE @json NVARCHAR(MAX);

-- Use sys.dm_exec_query_stats to enable SQL Server to execute external scripts
-- Indb is the database name
USE lndb;

EXEC sp_execute_external_script
@language = N'Python',
@script = N'
import requests

url = "https://www.banxico.org.mx/SieAPIRest/service/v1/series/SF43718/datos/oportuno?token=734b37b3a5099a9d2d39d06478d47e359a9568cd6693116d95b710e6b8be0008"
response = requests.get(url)
json_response = response.text
json_response',
@output_data_1_name = N'json',
@output_data_1 = @json OUTPUT;

-- Parse the JSON response using OPENJSON
DECLARE @usdRate DECIMAL(18, 6);

SELECT @usdRate = value
FROM OPENJSON(@json, '$.bmx.series[0].datos[0].dato') 
WITH (value DECIMAL(18, 6) '$');

-- Display the result
SELECT @usdRate AS USDExchangeRate;

Msg 297, Nível 16, Estado 101, Procedimento sp_execute_external_script, Linha 1 [Batch Start Line 0] O usuário não tem permissão para executar esta ação.

O administrador já me deu permissão

O administrador já me deu permissão

Além disso, o que é sys.dm_exec_query_stats

sql-server
  • 1 respostas
  • 34 Views
Martin Hope
idrizza
Asked: 2023-12-13 22:12:37 +0800 CST

Dividir linhas em polígonos em um gatilho PostGIS

  • 5

Eu tenho uma tabela de linhas nomeada segmentarmazenada no referenceesquema e uma tabela de polígonos nomeada communesem um donnees_externesesquema. Tento criar um gatilho que divida os recursos dos segmentrecursos communesna atualização do geomcampo ou na inserção de um novo arquivo segment. Duas situações:

  • inserção: o novo recurso deve ser dividido nos limites dos communespolígonos, e cada linha resultante deve ter alguns atributos do polígono do qual faz parte
  • atualização: o recurso existente deve continuar a existir, seu id não deve mudar, mas deve ter uma nova divisão geográfica nos limites dos polígonos e novos atributos, se necessário. Novos recursos devem ser inseridos na mesma tabela para cada novo polígono que a NEWgeometria intercepta.

Meu código abaixo atualiza o recurso existente de acordo, mas as linhas que deveriam ser inseridas na tabela não o são. Acho que tem algo a ver com a forma como lido com os retornos da função, mas tentei muitas combinações sem sucesso.

CREATE OR REPLACE FUNCTION split_segments_on_communes_and_update_collectivities_codes() 
RETURNS TRIGGER AS
$BODY$
DECLARE
rec RECORD;
BEGIN
    FOR rec IN
        SELECT c.insee_com AS insee_com,
               '0' || c.insee_dep AS insee_dep,
               c.insee_reg AS insee_reg,
               c.code_epci AS code_epci,
               (ST_Dump(ST_Intersection(NEW.geom, c.geom))).geom AS geom,
               (ST_Dump(ST_Intersection(NEW.geom, c.geom))).path[0] AS "path",
               NEW.id_statut,
               NEW.propriete,
               NEW.author,
               NEW.create_date
          FROM donnees_externes.commune c
          WHERE ST_Intersects(NEW.geom, c.geom)
    LOOP
        IF rec."path" = 1 OR rec."path" IS NULL THEN
            NEW.geom = rec.geom;
            NEW.code_reg = rec.insee_reg;
            NEW.code_dep = rec.insee_dep;
            NEW.code_epci = rec.code_epci;
            NEW.code_commune = rec.insee_com;
        ELSE
            INSERT INTO reference.segment (geom,
                                           id_statut,
                                           propriete,
                                           code_epci,
                                           code_dep,
                                           code_reg,
                                           author,
                                           create_date,
                                           code_commune)
            VALUES (
                   rec.geom,
                   NEW.id_statut,
                   NEW.propriete,
                   rec.code_epci,
                   rec.insee_dep,
                   rec.insee_reg,
                   NEW.author,
                   NEW.create_date,
                   rec.insee_com);
        END IF;
    END LOOP;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;


CREATE OR REPLACE TRIGGER split_segments_on_communes_and_update_collectivities_codes
 BEFORE INSERT
    OR UPDATE OF geom
    ON reference.segment
 FOR EACH ROW
 WHEN (pg_trigger_depth() < 1)
 EXECUTE PROCEDURE split_segments_on_communes_and_update_collectivities_codes();
postgresql
  • 1 respostas
  • 41 Views
Martin Hope
user231744
Asked: 2023-12-13 22:10:17 +0800 CST

Consulta SQL para classificar dados com base no valor máximo

  • 5

Aqui está meu conjunto de dados:

insira a descrição da imagem aqui

Para qualquer 'tempo' (basicamente a cada segundo), cerca de 3 a 5 'IDs de células' são registrados. O que preciso saber é o 'ID da célula' do 'sinal de referência _ potência recebida' máximo recebido para cada conjunto de tempo (segundo).

Por exemplo, no primeiro conjunto de tempo, 10:32:25, vemos quatro 'IDs de células', 420, 214, 284 e 323 e é fácil ver que o máximo 'sinal de referência _ potência recebida' é -87,38 para o primeiro horário. Agora podemos criar uma consulta SQL para fazer isso para nós?

Tenho horas de dados, então uma solução programática é muito desejável.

mysql
  • 1 respostas
  • 27 Views
Martin Hope
seevans38
Asked: 2023-12-13 16:26:47 +0800 CST

Retornar a sequência consecutiva mais longa de um valor em uma coluna específica

  • 5

Estou usando o PostgreSQL 12.0 e tentando obter a sequência mais longa de linhas contínuas para uma coluna e valor específicos.

A tabela é chamada team2 e contém os resultados de uma equipe que se parece com:

match_id (pk), team_name (varchar), opposition (varchar), match_result (varchar)

Minha consulta está tentando encontrar a sequência mais longa de 'Win' em match_result. Há 23 vitórias no total e usando o olho a sequência mais longa deve retornar 5. No entanto, 23 são retornados. Como posso alterar minha consulta para selecionar apenas a sequência mais longa?

WITH ConsecutiveSequences AS (
  SELECT
    match_result,
    ROW_NUMBER() OVER () - ROW_NUMBER() OVER (ORDER BY match_id) AS grp
  FROM team2
  WHERE match_result = 'Win'
),
GroupedSequences AS (
  SELECT
    match_result,
    COUNT(*) AS consecutive_count
  FROM ConsecutiveSequences
  GROUP BY match_result, grp
)
SELECT
  COALESCE(MAX(consecutive_count), 0) AS longest_consecutive_sequence
FROM GroupedSequences;
cte
  • 1 respostas
  • 25 Views
Martin Hope
Mike
Asked: 2023-12-13 06:42:10 +0800 CST

MySQL Proxy não funciona mais notado quando backend MySQL na versão 5.7.43-47-log

  • 6

Ao desenvolver aplicativos analíticos de dados, a estação de trabalho precisa usar o MySQL-Proxy (versão 0.8) para se conectar à fonte de dados MySQL. Este método tem funcionado bem há anos, no entanto, notamos recentemente que a conexão não está mais funcionando.

A versão do MySQL é 5.7.43-47-log, entretanto, não temos cem por cento de certeza se foi devido à atualização da versão.

O problema está bloqueando nosso desenvolvimento, por isso agradecemos muito quaisquer dicas e sugestões.

mysql
  • 1 respostas
  • 24 Views
Martin Hope
Justin Lowen
Asked: 2023-12-13 06:40:43 +0800 CST

PostgreSQL - atualizações de 30.000 linhas, definir coluna booleana não indexada como 'true' leva horas

  • 5

Estou executando o PostgreSQL 13, e uma única instrução UPDATE que parece trivial para ser concluída pode levar horas (pelo menos em um caso, mais de 24 horas).

A seleção das linhas com uma instrução SELECT leva menos de um segundo. A atualização das linhas é drasticamente mais lenta, com apenas 30.000 linhas afetadas.

A coluna em questão que estou tentando atualizar não está indexada. O banco de dados também está bem provisionado para a escala do banco de dados. Enquanto a consulta está ativa, posso ver 1 dos 4 vCPU em plena aceleração. As configurações de memória são ajustadas aos padrões típicos recomendados para um sistema de 32 GB de RAM.

Após a primeira execução, posso alternar a coluna booleana arquivada para frente e para trás com muito mais rapidez (5 minutos na primeira ATUALIZAÇÃO -> 15 segundos para fazer o inverso no meu caso simulado).

Existem algumas propriedades que tornam esta tabela única. O esquema do banco de dados é altamente normalizado. Esta tabela contém os nomes e uuids de muitos dos modelos de dados, portanto, há muitos relacionamentos FK. A tabela possui 16 colunas, com 10 índices e 4 restrições. O valor da coluna atualizado não faz parte de uma restrição ou índice.

Por que o desempenho desta consulta de atualização é tão ruim? Há algo que eu possa fazer para melhorar o desempenho?

Plano de consulta

postgresql
  • 2 respostas
  • 65 Views
Martin Hope
InterLinked
Asked: 2023-12-13 04:55:41 +0800 CST

Como gerar o enésimo dia do mês mais recente?

  • 5

Pergunta simples, mas não encontrei nenhum exemplo disso no Stack Exchange:

Preciso poder selecionar todos os registros do ciclo de faturamento atual, só isso. O problema é que o ciclo de faturamento não começa no primeiro dia do mês, então não posso simplesmente fazer isso MONTH(date) = MONTH(CURRENT_DATE()). Posso comparar as partes da data individualmente, mas lidar com o envolvimento por meses e anos é uma dor. Por exemplo, se o ciclo de faturamento começar no dia 15 de cada mês, a partir da data de publicação, a data será 2023-11-15, e não 2023-12-15. E daqui a um mês, seria um mês e2023-12-15 ano diferente da data atual.

Como o SQL fica longo e confuso apenas ao lidar com esse filtro, gostaria de gerar o início da última data de faturamento uma vez e comparar a data inteira diretamente com ela, mas estou tendo problemas para juntar isso. por exemplo WHERE date >= '2023-11-15'(mas gerando esta data dinamicamente). Subtrair INTERVAL 1 MONTHpara obter o mês de início do ciclo de faturamento não funciona, pois isso só acontece se for anterior ao dia do ciclo de faturamento do mês atual. Existe uma maneira elegante de calcular o nthdia mais recente do mês no MySQL/MariaDB, seja esse dia no mês atual ou no anterior?

mysql
  • 1 respostas
  • 28 Views
Martin Hope
GreenhornCJ
Asked: 2023-12-13 02:12:57 +0800 CST

MariaDB- Posso criar um requisito de chave exclusivo se as datas forem iguais, mas permitir se forem diferentes?

  • 5

Estou tentando criar um índice exclusivo de código de barras e data. É possível ter make barcode unique unless date is different than inserted row's (date) being inserted? Criei um índice exclusivo no código de barras, mas às vezes as etiquetas são reimpressas acidentalmente ou as sequências são redefinidas depois que o tempo passa e ocorre o limite de três dígitos de 999.

    [barcode]          [date]            what i want to happen
=========================================================
    1234567999        2022-12-01          be entered into database
    1234567001        2022-12-02          be entered into database
    1234567999        2023-12-01          be entered into database
    1234567001        2023-12-02          be entered into database
    1234567999        2023-12-01          fail as duplicate

Como faço para que isso aconteça no Maria DB?

mariadb
  • 2 respostas
  • 12 Views
Martin Hope
J. Mini
Asked: 2023-12-12 23:07:04 +0800 CST

Como os erros de tempo de execução podem ser diferenciados de outros?

  • 5

Considere a seguinte mensagem de erro.

Msg 207 Nível 16 Estado 1 Linha 7

Nome de coluna inválido 'FOO'.

Por causa de como eu o acionei , sei que foi um erro de tempo de análise/compilação.

Suponha que eu estivesse executando um script longo que não fazia parte de um procedimento e recebi a mesma mensagem de erro. O que nesta mensagem de erro me diz que o erro ocorreu em tempo de análise/compilação, e não em tempo de execução?


CREATE TABLE Department_History
(
    DepartmentNumber INT
);
GO

ALTER TABLE Department_History ADD FOO INT;

-- This is fine and shows FOO.
SELECT * FROM Department_History;

-- When uncommented, this fails at parse time.
INSERT Department_History (DepartmentNumber, FOO) VALUES (4, 5), (6, 7), (8, 9);
sql-server
  • 1 respostas
  • 122 Views
Prev
Próximo

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