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
lecuong92
Asked: 2015-07-28 22:55:02 +0800 CST

Por que a data e hora da pesquisa da minha consulta não corresponde?

  • 21
select * 
from A 
where posted_date >= '2015-07-27 00:00:00.000' 
  and posted_date  <= '2015-07-27 23:59:59.999'

Mas o resultado contém um registro que postou_date hoje: 2015-07-28. Meu servidor de banco de dados não está no meu país. Qual é o problema ?

sql-server datetime
  • 4 respostas
  • 47396 Views
Martin Hope
Clarkey
Asked: 2015-05-07 08:25:25 +0800 CST

Como substituir atomicamente os dados da tabela no PostgreSQL

  • 21

Desejo substituir todo o conteúdo de uma tabela, sem afetar nenhuma SELECTinstrução recebida durante o processo.

O caso de uso é ter uma tabela que armazene informações de caixa de correio que são extraídas regularmente e precisam ser armazenadas em uma tabela PostgreSQL. Existem muitos clientes usando um aplicativo que consulta constantemente essa mesma tabela.

Normalmente, eu faria algo como (pseudocódigo recebido)...

BEGIN TRANSACTION
TRUNCATE TABLE
INSERT INTO
COMMIT

Mas infelizmente a tabela não pode ser lida durante este processo; devido ao tempo que leva INSERT INTOpara ser concluído. A mesa está bloqueada.

No MySQL, eu teria usado o RENAME TABLEcomando atômico para evitar esses problemas...

CREATE TABLE table_new LIKE table; 
INSERT INTO table_new;
RENAME TABLE table TO table_old, table_new TO table; *atomic operation*
DROP TABLE table_old;

Como eu poderia conseguir isso no PostgreSQL?

Para os propósitos desta questão, você pode assumir que não estou usando chaves estrangeiras.

postgresql
  • 1 respostas
  • 24271 Views
Martin Hope
Der Kommissar
Asked: 2015-04-23 10:02:18 +0800 CST

Selecione todos os registros, junte-se à tabela A se a associação existir, a tabela B se não

  • 21

Então aqui está o meu cenário:

Estou trabalhando na localização para um projeto meu e normalmente faria isso no código C#, mas quero fazer isso no SQL um pouco mais, pois estou tentando melhorar um pouco meu SQL.

Ambiente: SQL Server 2014 Standard, C# (.NET 4.5.1)

Nota: a linguagem de programação em si deve ser irrelevante, estou incluindo apenas para completar.

Então eu meio que consegui o que eu queria, mas não na medida que eu queria. Já faz um tempo (pelo menos um ano) desde que eu fiz qualquer SQL JOIN, exceto os básicos, e isso é bastante complexo JOIN.

Aqui está um diagrama das tabelas relevantes do banco de dados. (Há muito mais, mas não é necessário para esta parte.)

Diagrama de banco de dados

Todos os relacionamentos descritos na imagem estão completos no banco de dados - as restrições PKe FKestão todas configuradas e operacionais. Nenhuma das colunas descritas é nullcapaz. Todas as tabelas têm o esquema dbo.

Agora, eu tenho uma consulta que quase faz o que eu quero: ou seja, dado ANY Id of SupportCategoriese ANY Id of Languages, ela retornará:

Se houver uma tradução correta para esse idioma para essa string (ou seja StringKeyId-> StringKeys.Idexiste, e em LanguageStringTranslations StringKeyId, LanguageId, e StringTranslationIdcombinação existe, então ele carrega StringTranslations.Textpara esse StringTranslationId.

Se a combinação LanguageStringTranslations StringKeyId, LanguageIde NÃO existir, ele carrega o valor. O é um dado .StringTranslationIdStringKeys.NameLanguages.Idinteger

Minha consulta, seja uma bagunça, é a seguinte:

SELECT CASE WHEN T.x IS NOT NULL THEN T.x ELSE (SELECT
    CASE WHEN dbo.StringTranslations.Text IS NULL THEN dbo.StringKeys.Name ELSE dbo.StringTranslations.Text END AS Result
FROM dbo.SupportCategories
    INNER JOIN dbo.StringKeys
        ON dbo.SupportCategories.StringKeyId = dbo.StringKeys.Id
    INNER JOIN dbo.LanguageStringTranslations
        ON dbo.StringKeys.Id = dbo.LanguageStringTranslations.StringKeyId
    INNER JOIN dbo.StringTranslations
        ON dbo.StringTranslations.Id = dbo.LanguageStringTranslations.StringTranslationId
WHERE dbo.LanguageStringTranslations.LanguageId = 38 AND dbo.SupportCategories.Id = 0) END AS Result FROM (SELECT (SELECT
    CASE WHEN dbo.StringTranslations.Text IS NULL THEN dbo.StringKeys.Name ELSE dbo.StringTranslations.Text END AS Result
FROM dbo.SupportCategories
    INNER JOIN dbo.StringKeys
        ON dbo.SupportCategories.StringKeyId = dbo.StringKeys.Id
    INNER JOIN dbo.LanguageStringTranslations
        ON dbo.StringKeys.Id = dbo.LanguageStringTranslations.StringKeyId
    INNER JOIN dbo.StringTranslations
        ON dbo.StringTranslations.Id = dbo.LanguageStringTranslations.StringTranslationId
WHERE dbo.LanguageStringTranslations.LanguageId = 5 AND dbo.SupportCategories.Id = 0) AS x) AS T

O problema é que ele não é capaz de me fornecer TODOS os SupportCategoriese seus respectivos StringTranslations.Textse existir, OU seus StringKeys.Namese não existirem. É perfeito em fornecer qualquer um deles, mas não em todos. Basicamente, é para impor que, se um idioma não tiver uma tradução para uma chave específica, o padrão é usar o StringKeys.Nameque é de StringKeys.DefaultLanguageIdtradução. (Idealmente, nem isso faria, mas, em vez disso, carregaria a tradução para StringKeys.DefaultLanguageId, o que eu mesmo posso fazer se apontar na direção certa para o restante da consulta.)

Eu gastei muito tempo nisso, e eu sei que se eu fosse apenas escrever em C# (como eu costumo fazer) já estaria feito. Eu quero fazer isso no SQL e estou tendo problemas para obter a saída que eu gosto.

A única ressalva é que quero limitar o número de consultas reais aplicadas. Todas as colunas são indexadas e, como eu gosto delas por enquanto, e sem testes de estresse reais, não posso indexá-las ainda mais.

Edit: Outra observação, estou tentando manter o banco de dados o mais normalizado possível, então não quero duplicar as coisas se puder evitá-lo.

Dados de exemplo

Fonte

dbo.SupportCategories (Inteira):

Id  StringKeyId
0   0
1   1
2   2

dbo.Languages ​​(185 registros, mostrando apenas dois como exemplo):

Id  Abbreviation    Family  Name    Native
38  en  Indo-European   English English
48  fr  Indo-European   French  français, langue française

dbo.LanguagesStringTranslations (Inteira):

StringKeyId LanguageId  StringTranslationId
0   38  0
1   38  1
2   38  2
3   38  3
4   38  4
5   38  5
6   38  6
7   38  7
1   48  8 -- added as example

dbo.StringKeys (Inteira):

Id  Name    DefaultLanguageId
0   Billing 38
1   API 38
2   Sales   38
3   Open    38
4   Waiting for Customer    38
5   Waiting for Support 38
6   Work in Progress    38
7   Completed   38

dbo.StringTranslations (Inteira):

Id  Text
0   Billing
1   API
2   Sales
3   Open
4   Waiting for Customer
5   Waiting for Support
6   Work in Progress
7   Completed
8   Les APIs -- added as example

Saída de corrente

Dada a consulta exata abaixo, ele gera:

Result
Billing

Saída Desejada

Idealmente, eu gostaria de poder omitir o específico SupportCategories.Ide obter todos eles, assim (independentemente se o idioma 38 Englishfoi usado, ou 48 French, ou QUALQUER outro idioma no momento):

Id  Result
0   Billing
1   API
2   Sales

Exemplo Adicional

Dado que eu deveria adicionar uma localização para French(ou seja, adicionar 1 48 8a LanguageStringTranslations), a saída mudaria para (nota: este é apenas um exemplo, obviamente eu adicionaria uma string localizada a StringTranslations) (atualizado com exemplo em francês):

Result
Les APIs

Saída Desejada Adicional

Dado o exemplo acima, a seguinte saída seria desejada (atualizada com o exemplo em francês):

Id  Result
0   Billing
1   Les APIs
2   Sales

(Sim, eu sei que tecnicamente isso está errado do ponto de vista da consistência, mas é o que seria desejado na situação.)

Editar:

Pequena atualização, alterei a estrutura da dbo.Languagestabela, eliminei a Id (int)coluna dela e a substituí por Abbreviation(que agora é renomeada para Id, e todas as chaves estrangeiras e relacionamentos relativos atualizados). Do ponto de vista técnico, esta é uma configuração mais apropriada na minha opinião devido ao fato de que a tabela está limitada aos códigos ISO 639-1, que são exclusivos para começar.

Tl; dr

Então: a pergunta, como eu poderia modificar essa consulta para retornar tudo eSupportCategories depois retornar StringTranslations.Textpara isso StringKeys.Id, Languages.Idcombinação ouStringKeys.Name se NÃO existisse?

Meu pensamento inicial é que eu poderia de alguma forma converter a consulta atual para outro tipo temporário como outra subconsulta e envolver essa consulta em outra SELECTinstrução e selecionar os dois campos que quero ( SupportCategories.Ide Result).

Se eu não encontrar nada, farei apenas o método padrão que normalmente uso, que é carregar tudo SupportCategoriesno meu projeto C# e, em seguida, executar a consulta que tenho acima manualmente em cada arquivo SupportCategories.Id.

Obrigado por todas e quaisquer sugestões/comentários/críticas.

Além disso, peço desculpas por ser absurdamente longo, só não quero nenhuma ambiguidade. Estou frequentemente no StackOverflow e vejo perguntas que carecem de substância, não queria cometer esse erro aqui.

sql-server t-sql
  • 2 respostas
  • 40009 Views
Martin Hope
andrewniesen
Asked: 2015-01-06 21:05:58 +0800 CST

Erro de pacote de inicialização incompleto do Postgres

  • 21

Estou tentando instalar o Postgres 9.3 no Ubuntu 14.04 e estou recebendo um erro irritante na inicialização. Aqui está o que estou vendo:

$ sudo service postgresql restart
* Restarting PostgreSQL 9.3 database server
* Error: could not exec /usr/lib/postgresql/9.3/bin/pg_ctl /usr/lib/postgresql/9.3/bin/pg_ctl start -D /var/lib/postgresql/9.3/main -l /var/log/postgresql/postgresql-9.3-main.log -s -o  -c config_file="/etc/postgresql/9.3/main/postgresql.conf" : [fail]

Então eu verifiquei o arquivo de log com esta saída:

 2015-01-05 21:50:05 EST LOG:  database system was shut down at 2015-01-05 21:50:03 EST
 2015-01-05 21:50:05 EST LOG:  database system is ready to accept connections
 2015-01-05 21:50:05 EST LOG:  autovacuum launcher started
 2015-01-05 21:50:06 EST LOG:  incomplete startup packet
 2015-01-05 21:51:22 EST ERROR:  syntax error at or near "exit" at character 1
 2015-01-05 21:51:22 EST STATEMENT:  exit;

"Pacote de inicialização incompleto" parece ser o culpado, mas estou tendo problemas para encontrar informações sobre o que pode estar acontecendo, então pensei em perguntar. Desde já, obrigado.

postgresql errors
  • 2 respostas
  • 99229 Views
Martin Hope
user1261104
Asked: 2015-01-03 02:22:04 +0800 CST

Por que não reconstruir índices com contagem de páginas <1000?

  • 21

Eu uso o script Ola Hallengrens para manutenção do índice. Antes de fazer isso, usei a seguinte consulta para ver quais índices estão mais fragmentados:

SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
ORDER BY indexstats.avg_fragmentation_in_percent desc

No meu caso, o avg_fragmentation foi superior a 70% para 15 índices e superior a 30% para 28 índices.

Então, eu reconstruo cada índice usando a solução de Ola Hallengren. Quando executei a consulta novamente, este foi o resultado:

Fragmentação acima de 70% para 12 índices, acima de 30% para 15 índices.

Imaginei, o motivo era por causa do page_count, que era inferior a 1000 para cada um dos índices que ainda estavam muito fragmentados. Por exemplo, um dos índices com um page_count de 967 tem uma porcentagem de fragmentação de 98,98% ! Para mim, parece valer a pena reconstruir esse índice! Eu fiz, e depois, a fragmentação foi de 0% . Além disso, um índice com um page_countde 132 passou de 95% para 0%

Então, minha pergunta é: quais motivos haveria para NÃO reconstruir esses índices? Uma razão pode ser que a reconstrução custa tempo e recursos, mas como os índices são pequenos, isso não significa que custa relativamente poucos recursos e ainda seria benéfico reconstruí-la de qualquer maneira?

Existem várias perguntas relacionadas neste site, mas todas elas respondem à pergunta por que um índice não seria desfragmentado ou se os índices ainda são úteis se forem pequenos e você não os desfragmentar, enquanto aqui a declaração DIMINUI a fragmentação, com a questão é, por que não fazê-lo de qualquer maneira?

sql-server index
  • 1 respostas
  • 29751 Views
Martin Hope
AKDiscer
Asked: 2014-06-11 08:57:23 +0800 CST

Como você encontra a versão/edição do SQL Server sem o SSMS instalado?

  • 21

Como descobrir qual edição está instalada sem ter o estúdio de gerenciamento instalado? Tenho um servidor que funciona como gerenciador de licenças para outro software. Após a investigação de um alerta de alto uso de RAM, descobri que o processo sqlservr.exe está ocupando quase 2 GB de RAM.

Eu olhei através do menu do programa e descobri que o gerenciador de configuração foi instalado, caso contrário, é bastante básico. Cliquei nas propriedades do arquivo EXE e encontrei 10.50.1600.1, mas não encontrei nenhum lugar que indique se é Express, Dev, STN, ENT, etc.

Se eu tivesse que adivinhar, esta é uma edição expressa, mas eu queria saber se há um sinal óbvio.

Atualização: @Bob - O arquivo me diz o que eu sei, não a edição.

@valo - recebo o seguinte erro quando executo esse comando e verifiquei se os pipes nomeados estavam ativados:

HResult 0x35, Nível 16, Estado 1 Provedor de Pipes Nomeados: Não foi possível abrir uma conexão com o SQL Server [53]. Sqlcmd: Erro: Microsoft SQL Server Native Client 10.0: Ocorreu um erro relacionado à rede ou específico da instância ao estabelecer uma conexão com o SQL Server. O servidor não foi > encontrado ou não está acessível. Verifique se o nome da instância está correto e se o SQL Server está configurado para permitir conexões remotas. Para obter mais informações, consulte os Manuais Online do SQL Server. Sqlcmd: Erro: Microsoft SQL Server Native Client 10.0: Tempo limite de logon expirado.

@thomas - Eu notei o nome da unidade de manutenção de estoque antes de fazer a pergunta, mas isso parecia muito fácil, acho que minha suspeita inicial estava correta.

sql-server
  • 4 respostas
  • 51277 Views
Martin Hope
Greg Bala
Asked: 2014-04-29 06:56:38 +0800 CST

Copie os planos de manutenção para um servidor diferente

  • 21

Existe uma maneira de copiar planos de manutenção de um SQL Server 2012 para outro? Ambos os servidores não podem ser acessados ​​pela mesma cópia do Management Studio ao mesmo tempo (em redes diferentes).

sql-server-2012 maintenance-plans
  • 3 respostas
  • 55399 Views
Martin Hope
jason.zissman
Asked: 2014-03-20 08:22:16 +0800 CST

Obtenha arquivos WAL da instância PostgreSQL do AWS RDS

  • 21

Temos uma instância Postgres RDS no Amazon Web Services. Temos backups automáticos ativados e tiramos instantâneos diariamente. Gostaríamos de gerar um backup local 'atualizado' da instância RDS que possamos gerenciar nós mesmos. A execução de pg_dump na instância não é suficiente porque queremos poder restaurar o banco de dados a qualquer momento. Preferimos ter um backup local do RDS e de todos os arquivos WAL desde que o backup foi feito. Perguntas:

  1. É possível acessar os arquivos WAL e backups que o RDS está gerando automaticamente em sua rotina de backup? Isso seria ideal. Eu gostaria de baixar uma cópia local deles. Após a investigação inicial, sinto que a resposta a esta pergunta é 'não'. Parece que o RDS está armazenando seus arquivos WAL e backups no S3, mas isso os torna inacessíveis para nós. Adoraria a confirmação.

  2. Existe alguma outra forma de acessar as transações (arquivos WAL) que ocorreram na instância do RDS? Imagino que deveríamos ser capazes de criar um banco de dados Postgres em um EC2 e 'alimentar' transações de nossa instância RDS 'ao vivo' primária para esta instância EC2. Depois que nossa instância do EC2 for atualizada, podemos extrair arquivos WAL de lá. Mas que dor de cabeça :/ Essa configuração é possível? Qual é a mágica de 'alimentar' de nossa instância RDS para a instância EC2 para que ela esteja sempre atualizada?

Obrigado!

postgresql amazon-ec2
  • 3 respostas
  • 17556 Views
Martin Hope
AJB
Asked: 2014-01-24 12:23:06 +0800 CST

Como determinar consultas MySQL por dia?

  • 21

Estou investigando a grande mudança do MySQL para um NoSQL DBaaS e encontrei um problema ao tentar prever as despesas. Essencialmente, não consigo descobrir quantas consultas meu servidor MySQL atual lida por dia para tentar estimar o número de solicitações que usarei com o Cloudant , que cobra US$ 0,015 por 100 PUTs, POSTs e DELETEs e US$ 0,015 por 500 GETs e CABEÇAS.

Encontrei muitas informações sobre como usar SHOW STATUS e SHOW GLOBAL STATUS para obter as estatísticas que o MySQL coleta sobre si mesmo, mas não há referência de período de tempo.

Por exemplo, SHOW GLOBAL STATUS retorna o seguinte:

Queries                           | 13576675

O que é ótimo, exceto que não tenho ideia do prazo que envolve esse número. 13 milhões de consultas quando? Por mês? Ano? Desde o início dos tempos?

Os documentos do MySQL não são muito elaborados:

Consultas

O número de instruções executadas pelo servidor. Essa variável inclui instruções executadas em programas armazenados, ao contrário da variável Questions. Não conta os comandos COM_PING ou COM_STATISTICS. Esta variável foi adicionada no MySQL 5.0.76.

Agradecemos antecipadamente por qualquer ajuda.

mysql
  • 2 respostas
  • 21152 Views
Martin Hope
Mansfield
Asked: 2013-11-06 08:15:33 +0800 CST

Quais permissões são necessárias para truncar uma tabela?

  • 21

Eu tenho uma conta SQL com as seguintes permissões em um banco de dados:

insira a descrição da imagem aqui

A db_executorfunção da qual você vê esta conta como membro foi criada por este script:

CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO

GRANT EXECUTE TO [db_executor] 
GO

Quando executo um select, update, insertou deletena mesa, funciona bem. Quando tento truncatea tabela, ele me dá esta mensagem de erro:

Não é possível localizar o objeto "TableName" porque ele não existe ou você não tem permissões.

Qual permissão esta conta está faltando?

sql-server sql-server-2012
  • 5 respostas
  • 82357 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