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
Nikita Glukhov
Asked: 2023-12-10 13:30:58 +0800 CST

Predicado ON de LATERAL JOINs do Postgres

  • 6

Como funciona o predicado ON do Postgres LATERAL JOIN?

Deixe-me esclarecer um pouco a questão. Eu li a documentação oficial e vários artigos sobre esse tipo de JOIN. Pelo que entendi é um loop foreach com uma subconsulta correlacionada dentro - ele itera sobre todos os registros de uma tabela A, permitindo referenciar colunas de uma linha "atual" em uma subconsulta correlacionada B e juntar um conjunto de resultados do B para aquela linha "atual" de A - se a consulta B retornar 1 linha, haverá apenas um par, e se a consulta B retornar N linhas, haverá N pares com a linha "atual" duplicada de A. O mesmo comportamento dos JOINs usuais .

Mas por que há necessidade do predicado ON? Para mim, em JOINs usuais usamos ON porque temos um produto cartesiano de 2 tabelas a ser filtrado, e não é o caso de LATERAL JOIN, que produz pares resultantes diretamente. Em outras palavras, na minha experiência de desenvolvedor eu só vi CROSS JOIN LATERAL e LEFT JOIN LATERAL () ON TRUE (este último parece bastante desajeitado), mas um dia um colega me mostrou

SELECT
r.acceptance_status, count(*) as count
FROM route r
LEFT JOIN LATERAL (
    SELECT rts.route_id, array_agg(rts.shipment_id) shipment_ids
    FROM route_to_shipment rts
    where rts.route_id = r.route_id
    GROUP BY rts.route_id
) rts using (route_id)

e isso explodiu minha mente. Por que using (route_id)? Já temos where rts.route_id = r.route_iddentro da subconsulta!!! Talvez eu tenha entendido errado a mecânica das junções LATERAL?

postgresql
  • 2 respostas
  • 51 Views
Martin Hope
illright
Asked: 2023-12-10 09:35:56 +0800 CST

Como listar os usuários disponíveis no PostgreSQL tendo apenas o diretório de dados?

  • 5

Eu errei um pouco com uma instância Dockerizada do PostgreSQL e acidentalmente substituí os valores que eu tinha para POSTGRES_USERand POSTGRES_PASSWORD. Eles foram gerados aleatoriamente, então adivinhá-los está basicamente fora de questão. Por natureza do PostgreSQL Dockerizado, se você especificar seu próprio nome de usuário, a função postgresnão será criada. Isso significa que postgres, admin, rootsão funções inválidas na minha instância de banco de dados.

Agora estou preso a um diretório de dados em um volume que posso acessar e psqlque não consigo acessar porque não conheço nenhum nome de usuário válido nesse banco de dados. Existe uma lista de nomes de usuário neste diretório de dados que eu possa acessar de alguma forma para entrar e alterar a senha?

postgresql
  • 2 respostas
  • 31 Views
Martin Hope
jvkloc
Asked: 2023-12-10 02:45:11 +0800 CST

PostgreSQL cria banco de dados com erro de sintaxe de parâmetro

  • 5

Eu tenho a seguinte função para criar um banco de dados PostgreSQL com psycopg:

def create_database() -> None:
    """A function for creating a PostgreSQL database."""
    
    db_name = ('test_db',)
    sql_1 = """SELECT datname FROM pg_database"""
    sql_2 = """CREATE DATABASE %s"""
    with connect('create') as conn:
        try:
            cur = conn.cursor()
            cur.execute(sql_1)
            databases = cur.fetchall()
            if db_name in databases:
                print(f'Database named {db_name[0]} already exists.')
            else:    
                cur.execute(sql_2, db_name)
                cur.close()
                print('Creating database...')
                conn.commit()
                print('Database created.')
            
        except (Exception, DatabaseError) as error: 
            print(error, '\n-> Could not create database.')

Dá o seguinte erro:

syntax error at or near "$1"
LINE 1: CREATE DATABASE $1
                        ^ 
-> Could not create database.

Qual é o problema?

postgresql
  • 1 respostas
  • 29 Views
Martin Hope
user22476690
Asked: 2023-12-09 19:03:58 +0800 CST

As transações READ ONLY causam anomalias de serialização (ou SERIALIZABLE é útil para READ ONLY)?

  • 5

Estou usando PostgreSQL. Eu tentei construir um sistema que utilizasse exclusivamente transações SERIALIZABLE, na expectativa de que isso simplificasse o desenvolvimento do meu aplicativo. Eu marquei transações exclusivamente somente leitura com READ ONLY. No entanto, minhas gravações frequentemente entravam em conflito com SIReadLocks adquiridos por consultas somente leitura, transformando as gravações em novas tentativas contínuas. Desde então, fiz as consultas somente leitura serem executadas com READ COMMITTED e tudo funciona perfeitamente agora.

Agora eu me pergunto - se uma transação é SOMENTE LEITURA, digamos que se eu executar minha consulta no nível de isolamento REPEATABLE READ, quais anomalias de serialização poderiam ter acontecido e são evitadas por SERIALIZABLE (e seus custos associados)? Tenho dificuldade em pensar em um exemplo do benefício fornecido neste caso.

postgresql
  • 1 respostas
  • 77 Views
Martin Hope
shiwanginio
Asked: 2023-12-09 17:34:09 +0800 CST

ERRO: a classe do operador não existe para o método de acesso “btree”

  • 5

Encontrei um problema ao tentar executar um script. Aqui está o cenário:


-- Script to create collation
CREATE COLLATION case_insensitive 
(PROVIDER = icu, LOCALE ='und-u-ks-level2', DETERMINISTIC = FALSE);

-- Followed by adding an index using the collation
CREATE UNIQUE INDEX col1_idx ON my_table (col1 case_insensitive);

Lamentavelmente, durante o processo de indexação, encontrei o seguinte erro:


SQL Error [42704]: ERROR: operator class "case_insensitive" does not exist for access method "btree"

Eu verifiquei a pg_opclasstabela e ela não existia lá:

SELECT * FROM pg_opclass WHERE opcname = 'case_insensitive';

Alguma ideia do que estou fazendo de errado/perdendo aqui? Eu ficaria imensamente grato por qualquer informação ou assistência em relação a isso.

postgresql
  • 1 respostas
  • 28 Views
Martin Hope
Daniel Soto
Asked: 2023-12-09 05:20:14 +0800 CST

Precisa de ajuda com DBMS_COMPRESSION.GET_COMPRESSION_RATIO

  • 4

Preciso de ajuda sobre como executar o DBMS_COMPRESSION.GET_COMPRESSION_RATIOpacote em todas as tabelas de um banco de dados para ver se vale a pena implementar ou não.

Este é o procedimento que estou executando sozinho e preciso de uma forma de automatizá-lo para não precisar executá-lo manualmente tabela por tabela.

SET SERVEROUTPUT ON
DECLARE
 blkcnt_cmp PLS_INTEGER;
 blkcnt_uncmp PLS_INTEGER;
 row_cmp PLS_INTEGER;
 row_uncmp PLS_INTEGER;
 cmp_ratio NUMBER;
 comptype_str VARCHAR2(32767);
BEGIN
 DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
scratchtbsname => 'USERS' ,
ownname => 'OWNER' ,
objname => 'TABLE_NAME' ,
subobjname => NULL ,
comptype => DBMS_COMPRESSION.COMP_ADVANCED,
blkcnt_cmp => blkcnt_cmp,
blkcnt_uncmp => blkcnt_uncmp,
row_cmp => row_cmp,
row_uncmp => row_uncmp,
cmp_ratio => cmp_ratio,
comptype_str => comptype_str,
subset_numrows=> DBMS_COMPRESSION.comp_ratio_minrows,
objtype => DBMS_COMPRESSION.objtype_table
);
DBMS_OUTPUT.put_line( 'Number of blocks used by the compressed sample of the object : ' ||
blkcnt_cmp);
DBMS_OUTPUT.put_line( 'Number of blocks used by the uncompressed sample of the object : ' ||
blkcnt_uncmp);
DBMS_OUTPUT.put_line( 'Number of rows in a block in compressed sample of the object : ' ||
row_cmp);
DBMS_OUTPUT.put_line( 'Number of rows in a block in uncompressed sample of the object : ' ||
row_uncmp);
DBMS_OUTPUT.put_line ('Estimated Compression Ratio of Sample : ' ||
cmp_ratio);
DBMS_OUTPUT.put_line( 'Compression Type : ' ||
comptype_str);
END;
oracle
  • 1 respostas
  • 31 Views
Martin Hope
taxfree
Asked: 2023-12-08 22:03:40 +0800 CST

mongodump se recusa a se conectar com SSL

  • 5

Eu configurei minha instância mongod com a seguinte configuração:

net:
  port: 27017
  bindIp: 0.0.0.0
  ssl:
    mode: requireSSL
    PEMKeyFile: /config/mongo.pem
    CAFile: /config/ca.pem
    allowConnectionsWithoutCertificates: true

security:
  authorization: enabled

Posso me conectar a ele perfeitamente com mongosh:

mongosh --host="<mydomain.com>:27017" --username="root" --db="mydbname" --ssl --authenticationDatabase="admin"

Mas quando tento me conectar mongodumpusando exatamente as mesmas opções...:

mongodump --host="<mydomain.com>:27017" --username="root" --db="mydbname" --ssl --authenticationDatabase="admin"

...Falha com a mensagem Failed: error connecting to db server: no reachable servers. Verificando os logs do mongod, vejo o seguinte:

{"t":{"$date":"2023-12-08T13:55:30.966+00:00"},"s":"I",  "c":"NETWORK",  "id":22943,   "ctx":"listener","msg":"Connection accepted","attr":{"remote":"<my ip address>","uuid":"41542a35-0815-4fb7-a618-d3ecf6b21a33","connectionId":244,"connectionCount":4}}
{"t":{"$date":"2023-12-08T13:55:30.980+00:00"},"s":"W",  "c":"NETWORK",  "id":23234,   "ctx":"conn244","msg":"No SSL certificate provided by peer"}
{"t":{"$date":"2023-12-08T13:55:30.985+00:00"},"s":"I",  "c":"NETWORK",  "id":22944,   "ctx":"conn244","msg":"Connection ended","attr":{"remote":"<my ip address>","uuid":"41542a35-0815-4fb7-a618-d3ecf6b21a33","connectionId":244,"connectionCount":3}}

Essas três linhas são repetidas várias vezes até que a conexão expire.

Estou me perguntando por que aparece No SSL certificate provided by peerquando eu configurei allowConnectionsWithoutCertificatespara true. Obviamente, não parece ser um problema ao usar o mongosh, pois ele se conecta sem problemas.

mongodb
  • 2 respostas
  • 23 Views
Martin Hope
user22668153
Asked: 2023-12-08 01:59:41 +0800 CST

MySQL 8- Adicionar uma partição padrão a uma tabela particionada em um valor de campo

  • 6
Esta questão foi migrada do Stack Overflow porque pode ser respondida no Stack Exchange dos Administradores de Banco de Dados. Migrado há 4 dias .

Tenho uma tabela particionada por valores de um campo KPI. Existem alguns KPI com uma grande quantidade de linhas, alguns com números pequenos. O particionamento por nome de KPI (string) mantém um bom desempenho da consulta.

A fonte de dados ocasionalmente introduzirá um novo KPI que interrompe o carregador. O arquivo que está sendo carregado e que contém o novo valor de kpi falhará.

Quero adicionar uma partição padrão para cobrir essas condições.

Depois de pesquisar, encontrei e tentei este comando

alterar tabela X adicionar partição (valores pDefault da partição em (DEFAULT));

O ambiente de trabalho MySQL não gosta deste comando destacando o penúltimo ')' dizendo que não é válido nesta posição, esperando '('.

Examinei o índice de ajuda do MySQL e pesquisei no Google por uma hora, mas não consigo encontrar o que há de errado com esta ou outra maneira de fazer o que quero.

Ideias?

mysql
  • 2 respostas
  • 25 Views
Martin Hope
Jeff G
Asked: 2023-12-08 02:23:06 +0800 CST

Melhorar o desempenho da consulta da junção externa esquerda filtrada de tabelas grandes

  • 7

Estou tentando otimizar uma consulta que une duas tabelas grandes (mais de 40 milhões de linhas) no PostgreSQL 15.4.

SELECT files.id, ARRAY_AGG(b.status)
FROM files
LEFT OUTER JOIN processing_tasks b
    ON (files.id = b.file_id AND b.job_id = 113)
WHERE files.round_id = 591
GROUP BY files.id;

Dois explain (analyze)planos para exatamente a mesma consulta estão em:

  • https://explain.depesz.com/s/cUXB leva 87 segundos, usa Parallel Seq Scan ativado processing_tasks.job_id(plano padrão)

  • https://explain.depesz.com/s/j39G leva 4 segundos, usa varredura de índice de bitmap ativada processing_tasks.job_id(quando set local enable_seqscan = OFF)

Em files, 908.275/39.000.105 (2,3%) tuplas possuem round_id=591; é estático.
Em processing_tasks, 4.026.364/60.780.802 (6,6%) tuplas possuem job_id=113, e esse valor vai se tornar cada vez mais comum à medida que as linhas são inseridas, talvez chegando a 15% da tabela.

A guia "Comentários" nesses links inclui definições de tabela e índice e mostra que os pg_statsdados incluem esses valores mais comuns.

Eu ficaria feliz com um dos dois objetivos possíveis:

  1. Os 3 a 4 segundos necessários ao usar o Index Scan são aceitáveis ​​e, se isso for o melhor que posso fazer, devo continuar a substituir, enable_seqscanmesmo na produção? (dentro de uma transação, eu acho)

  2. Mas prefiro reduzir ainda mais esses 3-4 segundos, para menos de 2 segundos, e mantê-los assim à medida que processing_taskscresce.

postgresql
  • 2 respostas
  • 108 Views
Martin Hope
rwfitzy
Asked: 2023-12-08 01:57:07 +0800 CST

Mysql adicionando escravo a um mestre-> mestre

  • 4

Eu tenho um banco de dados MySQL existente master1 <-> master2 -> slavee quero adicionar outro escravo do master2. Se eu emitir o FLUSH TABLES WITH READ LOCK;on master2 necessário para despejar o banco de dados, isso afetará de alguma forma o master1? E como isso afeta o master2 antes que o dump seja concluído e o UNLOCK TABLES;seja emitido?

mysql
  • 2 respostas
  • 38 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