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

stUrb's questions

Martin Hope
stUrb
Asked: 2017-01-20 02:05:51 +0800 CST

Incluindo linhas da tabela base com junções à esquerda quando essas junções estão 'vazias'

  • 1

Eu tenho uma consulta que conta o número de reservas em uma tabela em vários intervalos de 15 minutos recuperados de outra tabela:

SELECT 
   t.*, count(r.id) as nof_reservations
FROM (
   SELECT time_start, time_end FROM `interval` 
   WHERE time_start < '18:00:00'
   AND time_end > '10:00:00'
) t -- holds a row per 15m interval

-- reservations of the assets
LEFT JOIN reservations r  
ON   start_utc < concat('2017-04-02 ', t.time_end)
AND  end_utc > concat('2017-04-02 ', t.time_start)

-- we need to filter the assets on their type, which is 
-- stored in the assets table
LEFT JOIN assets b 
ON r.asset_id = b.id

WHERE r.deleted_at is null
AND b.asset_type_id = 6 -- asset type we need
GROUP BY t.time_start, t.time_end;

Isso produz a tabela desejada. Mas quando não há reservas ( nof_reservations=0) toda a linha desaparece:

| time_start | time_end | nof_reservations |
+------------+----------+------------------+
| 11:00:00   | 11:15:00 | 2                |
| 11:15:00   | 11:30:00 | 2                |
| 11:30:00   | 11:45:00 | 2                |
...
+------------+----------+------------------+

Como estou recuperando cada intervalo <1800 >1000, pensei em obter linhas como

| time_start | time_end | nof_reservations |
+------------+----------+------------------+
| 10:00:00   | 10:15:00 | 0                |
| 10:15:00   | 10:30:00 | 0                |
| 10:30:00   | 10:45:00 | 0                |
| 10:45:00   | 11:00:00 | 0                |
| 11:00:00   | 11:15:00 | 2                |
| 11:15:00   | 11:30:00 | 2                |
| 11:30:00   | 11:45:00 | 2                |
...
+------------+----------+------------------+

O que estou perdendo na consulta mencionada anteriormente?

Esquemas:

CREATE TABLE `reservations` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `deleted_at` timestamp NULL DEFAULT NULL,
  `asset_id` int(11) NOT NULL,
  `start_utc` datetime NOT NULL,
  `end_utc` datetime NOT NULL
  PRIMARY KEY (`id`),
  KEY `idx_van_utc` (`start_utc`),
  KEY `id_tot_utc` (`end_utc`),
  KEY `idx_boot_id` (`asset_id`)
) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `assets` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `asset_type_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `interval` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `time_start` time NOT NULL,
 `time_end` time NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=97 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
mysql
  • 3 respostas
  • 4953 Views
Martin Hope
stUrb
Asked: 2014-12-17 01:11:16 +0800 CST

Agrupar por intervalo de anos

  • 5

Eu tenho uma grande tabela (~ 9 milhões de linhas) e quero agrupar as linhas em um campo contendo o ano. Até aqui é bem fácil:

// greatly simplified:
SELECT count(*), year FROM dataset GROUP BY year ORDER BY 2;

Definimos alguns períodos de tempo irregulares abrangendo vários anos:

<1945, 1946-1964, 1965-1974, 1975-1991, 1992-2005 and >2005

Não tenho ideia de como agrupar esses resultados na cláusula group by. Eu poderia fazer subconsultas para cada período de tempo.

SELECT
  ( SELECT count(*) FROM dataset WHERE year <= 1945 AND ...... ) AS pre1945,
  ( ....) AS period2,
  ....
FROM dataset

Mas isso não parece certo e estou me perguntando se seria possível deixar o Postgresql fazer isso. Especialmente porque a consulta é uma forte simplificação da consulta real: ela possui várias condições, entre elas uma cláusula ST_within abrangendo quatro tabelas. Portanto, escolher a abordagem de subconsulta resulta em uma consulta inchada.

Existe uma maneira melhor de criar esse resultado?

postgresql
  • 2 respostas
  • 5214 Views
Martin Hope
stUrb
Asked: 2014-12-13 00:40:35 +0800 CST

Migrar datadump binário do SQL Server para postgresql

  • 1

Acabei de obter um conjunto de dados muito grande (+/- 55 GB) em um formato binário do SQL Server.

Existe uma maneira fácil de importar este arquivo para um servidor Postgresql? Encontrei alguns programas conversores, mas eles 'apenas' convertem de servidor para servidor e não arquivo para arquivo ou arquivo para servidor.

Não tenho acesso a um SQL Server, portanto, importá-lo e usar esse temporário como fonte não é uma opção. Também não sou especialista em programas SQL Server...

Espero que alguém aqui tenha uma solução....

sql-server postgresql
  • 1 respostas
  • 724 Views
Martin Hope
stUrb
Asked: 2014-11-22 02:37:25 +0800 CST

ST_GeomFromGeoJSON() Faz com que o postgres trave

  • 7

Estou enfrentando um problema estranho que não consigo resolver. O servidor trava ao executar algumas consultas relacionadas ao postgis. Após alguma depuração, usando os exemplos fornecidos pelo postgis, parece que a ST_GEOMFROMGeoJSON()função faz com que o servidor trave.

Falhas:

SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) As wkt;

Funciona normalmente:

SELECT ST_AsText(
         ST_Transform(
               ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
                                         743265 2967450,743265.625 2967416,743238 2967416))',2249)
         ,4326)
        ) As wgs_geom; 

Ao olhar para o log, encontro estas entradas relacionadas ao travamento:

2014-11-21 11:27:46 CET LOG:  server process (PID 2377) was terminated by signal 11: Segmentation fault
2014-11-21 11:27:46 CET DETAIL:  Failed process was running: SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) As wkt;
2014-11-21 11:27:46 CET LOG:  terminating any other active server processes
2014-11-21 11:27:46 CET WARNING:  terminating connection because of crash of another server process
2014-11-21 11:27:46 CET DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
2014-11-21 11:27:46 CET HINT:  In a moment you should be able to reconnect to the database and repeat your command.
2014-11-21 11:27:46 CET LOG:  all server processes terminated; reinitializing
2014-11-21 11:27:46 CET LOG:  database system was interrupted; last known up at 2014-11-21 11:24:11 CET
2014-11-21 11:27:46 CET LOG:  database system was not properly shut down; automatic recovery in progress
2014-11-21 11:27:46 CET LOG:  record with zero length at 18/34BCAD4
2014-11-21 11:27:46 CET LOG:  redo is not required
2014-11-21 11:27:46 CET LOG:  database system is ready to accept connections
2014-11-21 11:27:46 CET LOG:  autovacuum launcher started

A pesquisa na web não rendeu uma solução. Talvez eu não esteja procurando o problema certo?

Tentei reiniciar o servidor porque talvez o sistema de arquivos tenha algumas falhas, sem resultados. O servidor em si é uma máquina Ubuntu 12.04 como VPS. O servidor postgresql é 9.3.5 e Postgis 2.1.4

Atualização
Como Craig Ringer sugeriu, usei o gdb para ver o que acontece quando o processo falha. Esta é a primeira saída:

Program received signal SIGSEGV, Segmentation fault.
0xb70dda59 in _IO_vfprintf_internal (s=0xbfde7150, format=<optimized out>,  ap=0xbfde7298 "") at vfprintf.c:1630
1630    vfprintf.c: No such file or directory.

Também esta é a saída de postgis_full_verion():

POSTGIS="2.1.4 r12966" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.7.1, 23 September 2009" 
GDAL="GDAL 1.9.0, released 2011/12/29" LIBXML="2.7.8" 
LIBJSON="UNKNOWN" TOPOLOGY RASTER

Estou certo em dizer que algo está errado vfprintf.c? por exemplo, não existe?

Diz LIBJSON="UNKNOWN" isso poderia influenciar?

postgresql postgresql-9.3
  • 1 respostas
  • 671 Views
Martin Hope
stUrb
Asked: 2014-09-23 05:29:07 +0800 CST

Armazenando informações não muito voláteis no banco de dados com cache ou mongodb

  • 0

Para um novo projeto no qual estou trabalhando agora, eu estava em dúvida sobre qual banco de dados/sistema de armazenamento usar para informações específicas que não mudam com tanta frequência.

Temos, por exemplo, alguns perfis de empresas que terão apenas gravações incidentais quando coisas como o horário de funcionamento mudarem. Por outro lado, eles têm muita capacidade de leitura; a cada carregamento de página, as informações devem ser carregadas. Armazená-lo no sistema de arquivos como documentos simples resulta em muito IO; Usando isso como ponto de partida, eu estava procurando algum tipo de solução na memória.

Normalmente eu armazeno essas informações em um banco de dados Postgres, sem nenhum cache na camada de aplicativo. É claro que eu poderia adicionar uma camada de cache em redis ou memcached para produzir leituras de E/S menores do disco e lidar com atualizações do cache na camada de aplicativo na atualização das informações

Uma outra solução é usar o MongoDB para armazenar os 'documentos'. Mas não sei como o mongodb lida com a leitura/gravação. Por exemplo, a cada recuperação do documento, ele verifica o sistema de arquivos ou exibe o documento do cache/RAM? (Li em algum lugar que o mongodb mantém muita RAM disponível para si)

Alguém pode lançar alguma luz sobre isto?

postgresql mongodb
  • 1 respostas
  • 165 Views
Martin Hope
stUrb
Asked: 2014-05-01 08:29:50 +0800 CST

agrupar por e exibir o conteúdo da última linha para cada resultado

  • 4

Eu tenho alguns dados de dois objetos e quero recuperar a última linha de ambos os objetos, de preferência em uma consulta.

Estrutura da tabela:

CREATE TABLE data
(
  pid serial NOT NULL,
  dt timestamp without time zone,
  object_id integer,
  info_1 numeric(10,8),
  speed numeric,
  CONSTRAINT dat_pid PRIMARY KEY (pid)
)

Dados de amostra:

1, 2014-04-29 12:02:56, 8, ....
2, 2014-04-29 12:02:10, 8, ....
3, 2014-04-29 12:01:02, 8, ....
5, 2014-04-29 12:01:32, 6, ....
.....

Eu quero uma linha por ID de objeto exclusivo, cada linha sendo a mais recente disponível. Eu tentei conseguir usando esta consulta, mas ela quer que o pid esteja na cláusula group by. Mas não quero agrupar pelo PID e sim pelo id do rastreador....

SELECT * 
FROM data
GROUP BY object_id
postgresql postgresql-9.1
  • 1 respostas
  • 14328 Views
Martin Hope
stUrb
Asked: 2014-03-07 04:19:06 +0800 CST

Melhor abordagem para armazenar/exibir dados higienizados

  • 1

Navegando na web, encontro duas abordagens para armazenar dados em bancos de dados.

Abordagem 1:
armazenar dados no banco de dados com os caracteres especiais html higienizados

$userdata = $_POST['field'];
store_in_db_via_PDO(htmlspecialchars($userdata), 'field');
display_on_page(get_from_db('field'));

Abordagem 2:
Armazene os dados o mais brutos possível no banco de dados e limpe na exibição:

$userdata = $_POST['field'];
$store_in_db_via_PDO($userdata, 'field');
display_on_page(htmlspecialchars('field'));

BTW, não estou falando sobre ataques sqlinjection, eles são 'capturados' pelo driver PDO

Existe um padrão da indústria para armazenamento de dados, que não deve incluir código html, em um banco de dados?

mysql postgresql
  • 1 respostas
  • 742 Views
Martin Hope
stUrb
Asked: 2013-11-23 08:54:34 +0800 CST

Necessidade de índices em chaves estrangeiras

  • 38

Estou lutando com índices, chaves primárias e chaves estrangeiras... E a necessidade de ter todos eles.

Se eu tiver duas tabelas, ambas terão um inteiro como chave primária.
A primeira tabela faz referência por meio de um FK à chave primária da segunda tabela.

  • Em ambas as tabelas, tenho um índice de chave primária na coluna ID
  • Criei uma restrição FK no table1.ref_fieldreferenciamento do PK da segunda tabela ( table2.id)
  • e eu adicionei um índice emtable1.ref_field

Essa é a melhor maneira de organizar esses índices, chaves primárias e estrangeiras?

database-design postgresql
  • 1 respostas
  • 34486 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