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 / user-4363

AndreKR's questions

Martin Hope
AndreKR
Asked: 2022-09-12 16:43:40 +0800 CST

Gerar números sequenciais em uma junção

  • 5

Para cada linha do lado direito em um JOIN, gostaria de criar um número sequencial, começando em 1 (ou 0) para cada linha do lado esquerdo.

Exemplo:

create table persons (person_id int, person_name text);
create table places (place_id int, person_id int, place_name text);
insert into persons values (10, 'Aulus Agerius'), (20, 'Numerius Negidius');
insert into places values (10, 10, 'Anytown'), (20, 10, 'Timbuktu'), (30, 20, 'Podunk');
select person_name, place_name
from persons join places using (person_id)
order by person_id, place_id;

violino

Resultado desejado:

nome_pessoa coloque o nome place_seq
Aulo Agerio Qualquer cidade 1
Aulo Agerio Timbuctu 2
Numerius Negidius Podunk 1

Então, por exemplo, um 2 in place_seqsignificaria "este é o 2º lugar encontrado para esta pessoa".

Como criar a place_seqcoluna?

postgresql
  • 1 respostas
  • 315 Views
Martin Hope
AndreKR
Asked: 2022-04-26 18:12:06 +0800 CST

Posso escrever um FULL OUTER JOIN sem OR IS NULL?

  • 3

Aqui estão alguns dados para brincar:

CREATE TABLE a (
    a_id   int  NOT NULL,
    a_prop text NOT NULL
);

CREATE TABLE b (
    b_id   int  NOT NULL,
    b_prop text NOT NULL
);

INSERT INTO a VALUES (1, 'blah'), (2, 'blah'), (4, 'not this one');
INSERT INTO b VALUES (1, 'blah'), (3, 'blah'), (5, 'not this one');

Agora eu gostaria de escrever uma consulta que retorna:

resultado

Uma possibilidade é:

SELECT *
FROM a
FULL OUTER JOIN b ON a_id = b_id
WHERE (a_prop = 'blah' OR a_prop IS NULL)
AND (b_prop = 'blah' OR b_prop IS NULL);

Isso exige que eu escreva OR ... IS NULLpara todos os campos nos quais tenho uma condição. Isso se torna ainda mais detalhado se algumas condições forem intervalos de datas e similares.

Se esta fosse uma junção à esquerda:

SELECT *
FROM a
LEFT JOIN b ON a_id = b_id
WHERE a_prop = 'blah'
AND (b_prop = 'blah' OR b_prop IS NULL);

Eu poderia mover a condição para a ONcláusula para evitar isso:

SELECT *
FROM a
LEFT JOIN b ON a_id = b_id AND b_prop = 'blah'
WHERE a_prop = 'blah';

Existe uma maneira de fazer isso com a junção externa completa também?

violino

postgresql join
  • 2 respostas
  • 708 Views
Martin Hope
AndreKR
Asked: 2022-04-16 09:19:54 +0800 CST

Preciso de estatísticas além de um índice?

  • 0

Suponha que eu tenha uma tabela com imagens que devem passar por várias etapas:

CREATE TABLE images (filename text, extracted bool, cropped bool, resized bool);
    
INSERT INTO images (filename, extracted, cropped, resized)
VALUES
    ('foo', false, false, false),
    ('bar', true, false, false),
    ('baz', true, true, false),
    ('qux', true, true, true);

Em algum momento, tenho uma consulta para encontrar todas as imagens cortadas, mas que ainda precisam ser redimensionadas:

SELECT count(*) FROM images WHERE cropped AND NOT resized;

Agora acredito que a melhor maneira de tornar essa consulta rápida é um índice parcial:

CREATE INDEX ON images (cropped, resized) WHERE (cropped AND NOT resized);

Eu o tornaria parcial porque cropped AND NOT resizedé um estado relativamente raro, embora possa haver milhões de imagens que já estão totalmente processadas e também milhões que ainda não foram cortadas.

Minha pergunta agora é, preciso de estatísticas além do índice?

Um desses?

CREATE STATISTICS stat1 (dependencies) ON cropped, resized FROM images;
CREATE STATISTICS stat2 (ndistinct) ON cropped, resized FROM images;
CREATE STATISTICS stat3 (mcv) ON cropped, resized FROM images;
ANALYZE images;

Encontrei o capítulo Como o planejador usa estatísticas que eu havia perdido anteriormente (ou melhor, misturado com Estatísticas usadas pelo planejador ), mas ele fala apenas sobre como as estatísticas são transformadas em estimativas de linha. O que não está claro para mim é como os índices são escolhidos, uma vez que aparentemente não há estatísticas sobre os índices.

postgresql statistics
  • 3 respostas
  • 68 Views
Martin Hope
AndreKR
Asked: 2022-04-05 14:30:17 +0800 CST

Índice não usado para condição de intervalo de datas

  • 3

Eu estava consultando assim:

SELECT count(*)
FROM orders
WHERE planned_shipping_date >= '2022-04-04'
AND planned_shipping_date < '2022-04-05'

Então me deparei com esta resposta e, como em consultas mais complicadas, tornou a consulta mais fácil de ler, reescrevi a consulta assim:

SELECT count(*)
FROM orders
WHERE planned_shipping_date <@ daterange('2022-04-04', '2022-04-05')

Acredito que sejam semanticamente idênticos, mas vejam os planos:

Aggregate  (cost=76.91..76.92 rows=1 width=8) (actual time=1.066..1.068 rows=1 loops=1)
  ->  Index Only Scan using orders_planned_shipping_date_idx on orders  (cost=0.29..69.73 rows=2872 width=0) (actual time=0.067..0.646 rows=2813 loops=1)
        Index Cond: ((planned_shipping_date >= '2022-04-04'::date) AND (planned_shipping_date < '2022-04-05'::date))
        Heap Fetches: 0
Aggregate  (cost=2753.57..2753.58 rows=1 width=8) (actual time=18.309..18.311 rows=1 loops=1)
  ->  Index Only Scan using orders_planned_shipping_date_idx on orders  (cost=0.29..2751.93 rows=655 width=0) (actual time=17.520..18.132 rows=2813 loops=1)
        Filter: (planned_shipping_date <@ '[2022-04-04,2022-04-05)'::daterange)
        Rows Removed by Filter: 128138
        Heap Fetches: 0

O uso do intervalo de datas parece impedir o uso de um índice.

Preciso de um índice diferente ou não devo usar intervalos de datas como este?

postgresql index
  • 1 respostas
  • 344 Views
Martin Hope
AndreKR
Asked: 2021-05-09 14:25:04 +0800 CST

Existe uma diferença entre text_pattern_ops e COLLATE "C"?

  • 3

Se eu tiver uma coluna de texto namecom um agrupamento, por exemplo tr-TR, e executar uma consulta

SELECT * FROM t WHERE name LIKE 'a%'

então isso fará uma varredura seq.

Se eu agora criar um índice

CREATE INDEX ON t(name text_pattern_ops)

a consulta acima se tornará uma varredura de bitmap. Mas há outra técnica que alcançará o mesmo resultado:

CREATE INDEX ON t(name COLLATE "C")

Essas abordagens são completamente equivalentes ou existem diferenças?

postgresql index
  • 1 respostas
  • 1634 Views
Martin Hope
AndreKR
Asked: 2021-04-25 08:47:06 +0800 CST

Adicionar um número de dias a um carimbo de data/hora

  • 2

Eu gostaria de adicionar (ou melhor, subtrair) um número de dias de um timestamp.

Por exemplo de 2020-04-13 00:00:00 Europe/Berlinquero subtrair 20 dias e espero que o resultado seja 2020-03-24 00:00:00 Europe/Berlin.

Se eu correr

select ('2020-04-13 00:00:00 Europe/Berlin'::timestamptz - INTERVAL '20 DAY') AT TIME ZONE 'Europe/Berlin'

eu consigo 2020-03-23 23:00:00.000000.

Isso parece ser porque o PostgreSQL subtrai 20 * 24 horas (uma mudança de horário de verão ocorre durante esse intervalo de datas), o que é diferente de subtrair 20 dias .

postgresql date
  • 1 respostas
  • 263 Views
Martin Hope
AndreKR
Asked: 2019-10-10 04:05:39 +0800 CST

Restringir valores de matriz a um conjunto permitido de valores

  • 4

Eu gostaria de configurar uma restrição CHECK que garante que text[]os elementos de uma coluna contenham apenas determinados valores.

Configurando um exemplo:

CREATE TABLE foo(
  countries text[]
);

INSERT INTO foo VALUES ('{"Morocco", "Mali", "Indonesia"}');
INSERT INTO foo VALUES ('{"Sokovia", "Mali"}');

Agora apenas "Marrocos", "Mali" e "Indonésia" devem ser permitidos, então a segunda linha deve ser rejeitada pela restrição.

Eu tenho uma solução "funcionando":

CHECK (array_length(
  array_remove(
    array_remove(
      array_remove(
        countries,
        'Indonesia'
      ), 'Mali'
    ), 'Morocco'
  ), 1) IS NULL)

Mas isso não é muito legível.

Eu tentei isso também:

CHECK ((
  SELECT unnest(countries)
  EXCEPT
  SELECT unnest(array['Morocco', 'Mali', 'Indonesia'])
) IS NULL)

mas:

ERRO não pode usar a subconsulta na restrição de verificação

postgresql array
  • 1 respostas
  • 1021 Views
Martin Hope
AndreKR
Asked: 2019-04-10 07:56:08 +0800 CST

Como usar to_regclass com nomes de tabelas em maiúsculas?

  • 1

Estou usando to_regclass()para verificar se existe uma tabela (a partir daqui ). Isso funciona para nomes de tabelas em minúsculas, mas para nomes de tabelas com letras maiúsculas sempre retorna NULL, mesmo quando a tabela existe:

CREATE TABLE "asdf" (s text);
CREATE TABLE "FooBar" (s text);

SELECT to_regclass('asdf'); --     -> "asdf"
SELECT to_regclass('FooBar'); --   -> NULL
SELECT to_regclass('foobar'); --   -> NULL

violino

postgresql
  • 1 respostas
  • 409 Views
Martin Hope
AndreKR
Asked: 2018-06-20 02:49:25 +0800 CST

O que significa "Linhas removidas por verificação de índice" sem "com perdas"?

  • 3

Aqui está parte de uma EXPLAIN ANALYZE do Postgres 9.6:

->  Bitmap Heap Scan on cities  (cost=90.05..806.49 rows=265 width=4) (actual time=4.733..45.772 rows=17 loops=1)
       Recheck Cond: (regexp_replace(regexp_replace(replace(replace(replace(replace(lower(name), 'ä'::text, 'ae'::text), 'ö'::text, 'oe'::text), 'ü'::text, 'ue'::text), 'ß'::text, 'ss'::text), 'strasse\M'::text, 'strasse'::text, 'g'::text), '\W'::text, ''::text, 'g'::text) % 'coerde'::text)
      Rows Removed by Index Recheck: 567
      Heap Blocks: exact=497
      ->  Bitmap Index Scan on city_lookup_index  (cost=0.00..89.98 rows=265 width=0) (actual time=4.229..4.229 rows=584 loops=1)
             Index Cond: (regexp_replace(regexp_replace(replace(replace(replace(replace(lower(name), 'ä'::text, 'ae'::text), 'ö'::text, 'oe'::text), 'ü'::text, 'ue'::text), 'ß'::text, 'ss'::text), 'strasse\M'::text, 'strasse'::text, 'g'::text), '\W'::text, ''::text, 'g'::text) % 'coerde'::text)

O que Rows Removed by Index Rechecksignifica?

Ou em outras palavras: o bitmap não apresenta perdas (apenas exactpáginas), então por que ele contém ponteiros de tupla que foram (presumivelmente) removidos pela nova verificação?

postgresql execution-plan
  • 1 respostas
  • 859 Views
Martin Hope
AndreKR
Asked: 2018-06-07 05:29:27 +0800 CST

Como conceder todos os privilégios em um banco de dados?

  • 2

Existem muitas quase duplicatas para esta pergunta e todas que encontrei até agora estavam erradas e/ou incompletas, então sinto que precisamos de uma resposta canônica.

No PostgreSQL, como posso conceder todas as permissões em um banco de dados a um usuário, sem dar a ele permissões de SUPERUSER?

Isso inclui todas as tabelas , sequências , tipos , gatilhos , índices , procedimentos e quaisquer outros objetos que estejam atualmente no banco de dados e quaisquer objetos que sejam criados no banco de dados posteriormente, por este usuário ou outros. Claro, também inclui a capacidade de criar objetos no banco de dados.

postgresql permissions
  • 1 respostas
  • 2468 Views
Martin Hope
AndreKR
Asked: 2016-09-02 02:29:26 +0800 CST

Para que eu usaria uma chave estrangeira MATCH SIMPLE? [duplicado]

  • 2
Esta pergunta já tem respostas aqui :
Diferenças entre CORRESPONDÊNCIA COMPLETA, CORRESPONDÊNCIA SIMPLES e CORRESPONDÊNCIA PARCIAL? (2 respostas)
Fechado há 3 anos .

O que eu entendo:

Além das referências válidas à tabela referenciada, uma coluna com uma chave estrangeira também pode conter um valor NULL. O padrão SQL define vários modos de correspondência para chaves estrangeiras, como MATCH SIMPLE e MATCH FULL. Para chaves estrangeiras de várias colunas, MATCH SIMPLE permite um valor errado (= sem referência) em qualquer uma das colunas, desde que pelo menos uma coluna da chave estrangeira contenha um valor NULL.

As chaves estrangeiras de várias colunas são raras (porque as chaves primárias de várias colunas são), mas posso imaginar casos de uso válidos. Por exemplo, uma tradução de uma postagem de blog pode ter uma chave primária (post_id, language_id). Agora, algo que faça referência a tal tradução (por exemplo, qual tradução um usuário está editando no momento) teria uma chave estrangeira de várias colunas.

O que não entendo:

Por que eu usaria MATCH SIMPLE para minha chave estrangeira?

No exemplo acima, não faz sentido ter uma entrada "atualmente editando" que apenas faz referência a post_ide não a language_id.

Qual seria um exemplo em que faz sentido?

foreign-key constraint
  • 3 respostas
  • 3505 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