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-144614

Brown Bear's questions

Martin Hope
Brown Bear
Asked: 2019-05-15 23:31:51 +0800 CST

primeiro e último registro em uma consulta

  • 1

eu quero selecionar a primeira e a última pontuação desses dados

WITH t AS (
SELECT 1 user_id, '2019-05-15'::date AS created_at, 4 as score
UNION ALL
SELECT 1 user_id, '2019-05-13'::date AS created_at, 12 as score
UNION ALL
SELECT 2 user_id, '2019-05-15'::date AS created_at, 7 as score
UNION ALL
SELECT 3 user_id, '2019-05-13'::date AS created_at, 6 as score
),
first_score AS (
    SELECT DISTINCT ON (user_id)
        created_at, score, user_id
    FROM t
    ORDER BY user_id, created_at ASC
),
last_score AS (
    SELECT DISTINCT ON (user_id)
        created_at, score, user_id
    FROM t
    ORDER BY user_id, created_at DESC
)

select
    md5(u.user_id::varchar) user_id,
    u.created_at signup_date,
    fhs.created_at first_score_created_at,
    fhs.score first_score,
    lhs.created_at last_score_created_at,
    lhs.score last_score
from t as u 
    INNER JOIN first_score fhs ON fhs.user_id = u.user_id
    INNER JOIN last_score lhs ON lhs.user_id = u.user_id;

minha pergunta: existe uma maneira de fazer uma subconsulta para juntar o first_score e last_score em uma única consulta?

postgresql order-by
  • 1 respostas
  • 1604 Views
Martin Hope
Brown Bear
Asked: 2019-03-13 23:27:45 +0800 CST

Junção interna apenas para valores não vazios

  • 1

eu posso obter o resultado certo usando o where join , com o próximo sql:

WITH fktable1 AS (
SELECT 2 AS id
)
,fktable2 AS (
SELECT 3 AS id
)
SELECT main.*
FROM
-- main data
    (
    VALUES
    (1, NULL, NULL),
    (2, 2, NULL),
    (3, NULL, 3),
    (4, 2, 3),
    (5, 4, NULL), -- wrong, not exist fkcol1 in the fktable1
    (6, NULL, 5) -- wrong, not exist fkcol2 in the fktable2
    ) AS main (col1, fkcol1, fkcol2)
    , fktable1, fktable2
WHERE 
    (
        fktable1.id = main.fkcol1
        OR main.fkcol1 is NULL
    )
    AND (
        fktable2.id = main.fkcol2
        OR main.fkcol2 is NULL
    );

ele me dá a saída:

 col1 | fkcol1 | fkcol2 
------+--------+--------
    1 |        |       
    2 |      2 |       
    3 |        |      3
    4 |      2 |      3
(4 rows)

existe alguma maneira de obter o mesmo por declaração de junção de tabela? tentei encontrar solução e li muitas perguntas existentes, mas sem sucesso.

postgresql join
  • 2 respostas
  • 280 Views
Martin Hope
Brown Bear
Asked: 2019-03-08 05:42:57 +0800 CST

tornar existir tabela como herdar

  • 0

eu tento criar uma tabela pai para a tabela existente, pelo próximo algoritmo:

-- CREATE TABLE
CREATE TABLE t1 (id serial PRIMARY KEY);
CREATE TABLE foreign_t1 (id serial, t1_id integer REFERENCES t1 (id));
-- insert data
INSERT INTO t1
SELECT * FROM generate_series(1,4);
INSERT INTO foreign_t1
SELECT generate_series, generate_series % 3 + 1
FROM generate_series(1,9);
-- CRETAE PARENT table
CREATE TABLE parent_t1 (LIKE t1 including all);
-- ALTER t1 DO it inherit of the parent
ALTER TABLE t1 INHERIT parent_t1;
-- TRY TO MOVE FK TO the parent
ALTER TABLE foreign_t1 DROP CONSTRAINT foreign_t1_t1_id_fkey;
ALTER TABLE foreign_t1 ADD CONSTRAINT
foreign_t1_t1_id_fkey FOREIGN KEY(t1_id)
REFERENCES parent_t1 (id);

Mas veja o erro:

ERROR:  insert or update on table "foreign_t1" violates foreign key constraint "foreign_t1_t1_id_fkey"
DETAIL:  Key (t1_id)=(2) is not present in table "parent_t1".

E quando tento validar os dados parece que tudo existe:

dev=# SELECT id FROM parent_t1 WHERE id = 2;
 id 
----
  2

não consigo entender o que estou perdendo?

postgresql foreign-key
  • 1 respostas
  • 43 Views
Martin Hope
Brown Bear
Asked: 2019-02-19 06:30:58 +0800 CST

obter chaves de herança dentro do json

  • 0

Tenho campo JSON com valores como no exemplo, e preciso pegar todos os dados da chave 'stat' dentro dele. A lista de chaves dentro dos dados não é constante.

WITH test_data AS (
SELECT 1 as id,
    '{
      "calm_beach_reef": {"full_sessions": 0, "sessions": []}, 
      "island_of_tranquility": {"full_sessions": 0, "sessions": []}, 
      "peaceful_forest": {"full_sessions": 0, "sessions": []}, 
      "aurora_in_the_arctic": {"full_sessions": 0, "sessions": []}, 
      "serene_space": {"full_sessions": 0, "sessions": []}
     }'::json AS data
UNION ALL
SELECT 2,
    '{
      "calm_beach_reef": {"full_sessions": 0, "sessions": []}, 
      "island_of_tranquility": {"full_sessions": 0, "sessions": []}, 
      "peaceful_forest": {"full_sessions": 0, "sessions": []}, 
      "aurora_in_the_arctic": {"full_sessions": 0, "sessions": []}, 
      "serene_space": {"full_sessions": 0, "sessions": []}
     }'::json
UNION ALL
SELECT 3,
    '{
      "calm_beach_reef": {"full_sessions": 0, "sessions": [{"percent_from": 0, "percent": 0, "stat": "61/71#61/71,61/71#92/83,90/78#102/82,80/73#90/78,82/72#99/74,92/71#99/75,93/62#95/71,92/53#95/62,86/50#107/53", "completed_at": "2017-11-27 14:29:22.878709"}]}, 
      "island_of_tranquility": {"full_sessions": 0, "sessions": []}, 
      "peaceful_forest": {"full_sessions": 0, "sessions": []}, 
      "aurora_in_the_arctic": {"full_sessions": 0, "sessions": []}, 
      "serene_space": {"full_sessions": 0, "sessions": []}
     }'::json
UNION ALL
SELECT 4,
    '{
      "calm_beach_reef": {"full_sessions": 0, "sessions": [{"percent_from": 0, "percent": 1, "stat": "42/21#42/21,42/21#89/24,77/24#95/26,86/13#95/25,92/6#96/13,62/6#93/8,61/8#62/10,61/10#61/12,0/12,0/16,0/21,0/12#61/33,0/28#0/34,0/23#0/28,0/20#0/23,0/18#0/20,0/18#0/18,0/18#0/24,0/24#0/25,0/23#0/24,0/21#0/23,0/18#0/21,0/12#0/18,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12#0/12,0/12,0/15,0/12#47/21,0/21#0/25,0/25#0/29,0/29#0/33,0/30#0/35,0/27#0/30,0/27#0/34,0/31#0/35,0/27#0/31,0/25#0/28,0/28#0/31,0/24#0/31,0/23#0/25,0/25#0/27,0/25#0/28,0/19#0/24,0/16#0/19", "completed_at": "2018-08-20 12:18:14.404032"}]}, 
      "island_of_tranquility": {"full_sessions": 0, "sessions": []}, 
      "peaceful_forest": {"full_sessions": 0, "sessions": []}, 
      "aurora_in_the_arctic": {"full_sessions": 0, "sessions": []}, 
      "serene_space": {"full_sessions": 0, "sessions": []}
     }'::json
UNION ALL
SELECT 5,
    '{
      "calm_beach_reef": {"full_sessions": 0, "sessions": []}, 
      "island_of_tranquility": {"full_sessions": 0, "sessions": []}, 
      "peaceful_forest": {"full_sessions": 0, "sessions": []}, 
      "aurora_in_the_arctic": {"full_sessions": 0, "sessions": []}, 
      "serene_space": {"full_sessions": 0, "sessions": [{"percent_from": 0, "percent": 74, "stat": "50/41#50/41,48/41#50/43,48/41#48/43,0/45,0/43#48/54,0/54#52/54,52/54#52/55,0/54,0/54#52/56,0/51#0/55,0/50#0/51,0/50#0/51,0/51#63/56,63/56#71/61,69/61#72/64,69/63#69/66,66/64#69/65,66/61#71/64,72/53#80/61,75/46#80/53,72/43#75/46,69/36#75/43,75/31#79/36,75/30#79/31,71/31#73/32,69/31#78/32,69/32#78/32,64/32#69/33,64/33#70/33,70/33#70/33,70/33#70/33,70/33#74/35,74/35#75/40,75/40#75/45,75/45#75/50,75/50#76/56,74/56#79/60,79/60#79/64,79/64#79/67,75/67#79/68,69/68#75/68,65/68#69/68,67/54#78/68,73/45#78/54,72/42#76/45,76/39#77/42,73/34#77/38,72/29#73/34,73/21#75/29,74/11#76/21,75/6#81/11,77/4#81/6,74/3#77/6,75/6#79/10,75/10#78/15,74/15#78/22,78/22#82/25,74/25#82/27,72/27#74/31,72/25#72/31,71/22#72/25,71/23#80/28,80/28#85/37,72/37#84/48,69/48#72/67,0/74,0/67#69/75,0/66#0/71,0/60#0/66,0/55#67/60,63/53#64/55,64/53#64/55,64/53#64/56,64/45#64/53,64/44#64/48,62/48#64/56,62/56#62/63,0/64,0/63#62/65,0/65#0/75", "completed_at": "2018-08-08 18:57:51.990080"}]}
     }'::json
), keys AS (
    SELECT 
        json_object_keys(data) as key,
        id
    FROM test_data
)

, keys AS (
            SELECT 
               json_object_keys(data) as key,
               id
            FROM test_data
          )
 SELECT json_array_elements(gs.data->key->'sessions')->'stat',
     key
 FROM test_data gs
     JOIN keys ON keys.id = gs.id
 WHERE gs.data->key->'sessions' IS NOT NULL
     AND (gs.data->key->'sessions')::jsonb != '[]'

como você vê eu faço o join múltiplo para a tabela para si mesmo, está certo ou pode ser outra melhor solução?

Mais detalhes: no campo da tabela json, a versão atual do servidor é9.4

postgresql json
  • 1 respostas
  • 57 Views
Martin Hope
Brown Bear
Asked: 2019-02-12 06:23:32 +0800 CST

índice de floração postgres

  • 6

eu li o doc sobre postgres bloom , mas não consigo reproduzir os mesmos resultados, por favor me ajude a entender o que eu perdi. meu servidor é:

SHOW server_version;
        server_version         
-------------------------------
 10.6 (Debian 10.6-1.pgdg90+1)

dev=# show random_page_cost;
 random_page_cost 
------------------
 4

primeiro crie a tabela com o mesmo comando dos documentos:

dev=# CREATE TABLE tbloom AS                                               
   SELECT
     (random() * 1000000)::int as i1,
     (random() * 1000000)::int as i2,
     (random() * 1000000)::int as i3,
     (random() * 1000000)::int as i4,
     (random() * 1000000)::int as i5,
     (random() * 1000000)::int as i6
   FROM
  generate_series(1,10000000);

em seguida eu crio o índice btree

dev=# CREATE index btreeidx ON tbloom (i1, i2, i3, i4, i5, i6);
CREATE INDEX

e obter o próximo plano:

dev=# EXPLAIN ANALYZE SELECT * FROM tbloom WHERE i2 = 898732 AND i5 = 123451;
                                                       QUERY PLAN                                                        
-------------------------------------------------------------------------------------------------------------------------
 Gather  (cost=1000.00..127195.10 rows=1 width=24) (actual time=258.963..260.900 rows=0 loops=1)
   Workers Planned: 2
   Workers Launched: 2
   ->  Parallel Seq Scan on tbloom  (cost=0.00..126195.00 rows=1 width=24) (actual time=255.446..255.446 rows=0 loops=3)
         Filter: ((i2 = 898732) AND (i5 = 123451))
         Rows Removed by Filter: 3333333
 Planning time: 0.412 ms
 Execution time: 260.939 ms

Tempo de execução: 260,939 ms

e agora solte o índice btree e crie bloom:

dev=# DROP INDEX btreeidx;
DROP INDEX
dev=# CREATE INDEX bloomidx ON tbloom USING bloom (i1, i2, i3, i4, i5, i6);
CREATE INDEX

obter novo plano:

dev=# EXPLAIN ANALYZE SELECT * FROM tbloom WHERE i2 = 898732 AND i5 = 123451;
                                                       QUERY PLAN                                                        
-------------------------------------------------------------------------------------------------------------------------
 Gather  (cost=1000.00..127195.10 rows=1 width=24) (actual time=260.278..261.989 rows=0 loops=1)
   Workers Planned: 2
   Workers Launched: 2
   ->  Parallel Seq Scan on tbloom  (cost=0.00..126195.00 rows=1 width=24) (actual time=256.224..256.224 rows=0 loops=3)
         Filter: ((i2 = 898732) AND (i5 = 123451))
         Rows Removed by Filter: 3333333
 Planning time: 0.165 ms
 Execution time: 262.053 ms

Tempo de execução: 262,053 ms nos documentos

Bloom é melhor que btree

mas não no meu teste. Tentei várias opções com Comprimento mas não encontrei bom resultado.

postgresql index
  • 3 respostas
  • 343 Views
Martin Hope
Brown Bear
Asked: 2018-12-04 03:25:51 +0800 CST

índice de renomeação postgresql

  • 16

Eu quero entender o quão seguro é o comando rename:

ALTER INDEX old_name RENAME TO old_name;

O índice foi criado pelo comando (para a coluna de chave estrangeira):

CREATE INDEX old_name ON table_t1 (user_id);

Isso significa atualização simples nas tabelas do sistema postgres ou fazer muito mais operações. Eu tento encontrá-lo nos documentos, mas sem sucesso.

postgresql index
  • 1 respostas
  • 10271 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