Como posso determinar ou estimar o tamanho do arquivo dump SQL antes de usar algo como mysqldump?
Eu tenho um grande banco de dados que preciso extrair todas as chaves primárias e chaves estrangeiras de cada tabela.
Eu tenho o pgAdmin III.
Existe uma maneira de fazer isso automaticamente e não revisar cada tabela manualmente?
No trabalho, hospedamos todos os nossos servidores web no Amazon EC2 e geralmente usamos bancos de dados MySQL instalados na mesma caixa que nosso servidor web Apache e nos comunicamos com eles em arquivos localhost
. Agora enfrentamos a necessidade de migrar nosso banco de dados para um servidor próprio para um de nossos sistemas. Eu posso escolher entre duas soluções: usar o Amazon RDS ou apenas iniciar uma nova caixa do Amazon EC2 e instalar o MySQL nela.
O RDS, sendo um serviço de banco de dados dedicado fornecido pela mesma empresa que o EC2, parece ser a opção obviamente melhor . No entanto, quando vejo os preços das duas opções (consulte http://aws.amazon.com/ec2/pricing e http://aws.amazon.com/rds/pricing ), parece que um servidor RDS custa quase duas vezes mais que um servidor EC2 para uma caixa com as mesmas especificações.
Dado que sou capaz de lidar com backups sozinho e que o EC2 oferece a mesma capacidade de escalar a instância conforme exigido pelo RDS, não vejo nenhum motivo para usar o RDS em vez do EC2. Parece que provavelmente estou perdendo algo grande, porque se eu estivesse certo, ninguém usaria o RDS. O que exatamente estou perdendo e quais são as vantagens do RDS em relação à instalação de seu próprio banco de dados em uma instância do EC2?
Como o sistema de banco de dados mais "popular" (MySQL, Postgres...) lida com a alteração de tabelas em bancos de dados de produção ao vivo (como adicionar, excluir ou alterar o tipo de colunas)?
Eu sei que a maneira correta é fazer backup de tudo, agendar o tempo de inatividade e fazer as alterações.
Mas... algum sistema de banco de dados atual suporta fazer essas coisas "on-line" sem parar nada? (talvez apenas atrasando as consultas que fazem referência a uma coluna que está apenas sendo alterada/excluída)
E o que acontece quando eu apenas faço um ALTER TABLE...
banco de dados em execução ao vivo? Tudo para quando isso acontece? Os dados podem ser corrompidos? etc.
Novamente, estou me referindo principalmente ao Postgres ou MySQL, pois é isso que encontro.
(E, sim, sempre que eu tive que fazer isso antes de fazer "do jeito certo", fazer backup das coisas, agendar inatividade etc. ... mas eu só quero saber se é possível fazer esse tipo e coisas "rápidas e sujo" ou se houver algum sistema de banco de dados que realmente tenha suporte para alterações de esquema "rápidas, ao vivo e sujas")
Alguém acabou de sugerir Online Schema Change for MySQL a partir do script do Facebook (com um tutorial aqui e fonte aqui ) ... parece uma boa maneira de automatizar um conjunto de maneiras "hacky" de fazer isso ... algo parecido com produção?
O padrão ANSI SQL define (capítulo 6.5, especificação de função definida) o seguinte comportamento para funções agregadas em conjuntos de resultados vazios:
COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
Retornar NULL para AVG, MIN e MAX faz todo o sentido, já que a média, mínimo e máximo de um conjunto vazio é indefinido.
A última, porém, me incomoda: Matematicamente, a SOMA de um conjunto vazio está bem definida: 0
. Usando 0, o elemento neutro da adição, como o caso base torna tudo consistente:
SUM({}) = 0 = 0
SUM({5}) = 5 = 0 + 5
SUM({5, 3}) = 8 = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL
Definir SUM({})
como null
basicamente torna "sem linhas" um caso especial que não se encaixa nos outros:
SUM({}) = NULL = NULL
SUM({5}) = 5 != NULL + 5 (= NULL)
SUM({5, 3}) = 8 != NULL + 5 + 3 (= NULL)
Existe alguma vantagem óbvia da escolha que foi feita (SUM sendo NULL) que eu perdi?
Há algo no console do MySQL que me deixa louco. Quando pressiono ctrl+ cpara cancelar o comando atual que está sendo digitado, o terminal sai.
Em todos os terminais que conheço ( *nix
terminais, Python
, PostgreSQL
), ctrl+ ccancela o comando atual e ctrl+ dsai do terminal.
Esse problema foi relatado em 2003 e foi corrigido várias vezes desde então.
Existe uma maneira de:
- Mude este comportamento, ou
- Convencer a equipe de desenvolvimento do MySQL de que isso é realmente irritante?
Eu tenho um campo para armazenar alguns dados, o campo é declarado como varchar(max)
. No meu entendimento, isso deve estar armazenando 2^31 - 1
caracteres, mas quando insiro algum conteúdo com mais de 8000 caracteres, ele corta o resto.
Verifiquei que todos os dados estão incluídos na minha instrução de atualização e a consulta parece bem em todos os outros lugares, mas quando seleciono os dados de volta, eles são cortados.
Os dados são truncados quando os exponho em meu site e também quando uso o SSMS para arquivos select content from table
.
select DATALENGTH (content) from table
volta como 8000.
Eu defino os dados usando isto: update table set content = 'my long content' where id = 1
. O conteúdo tem muito HTML, mas não consigo ver isso causando problemas. A única coisa que posso ver que estou fazendo é substituir tudo "
, ''
pois isso é conteúdo inserido pelo usuário (não me lembro por que fiz isso agora).
Consegui inserir o conteúdo corretamente removendo todas as aspas simples no conteúdo, então acho que algo estranho está acontecendo com meus dados e não com o banco de dados.
Devo estar fazendo algo especial com a consulta para usar um varchar(max)
campo?
Usando: SQL Server 2008 (10.50) 64 bits.
Ao combinar pacientes com base em dados demográficos, existem recomendações sobre quais campos devem corresponder para que o paciente seja o "Mesmo paciente"?
Sei que os algoritmos serão diferentes para diferentes implementações, só estou curioso para saber se existem práticas recomendadas ou recomendações sobre esse processo.
First Name
Last Name
Date of Birth
SSN
Address
City
State
Zip
etc?
Eu tenho uma consulta SQL cujos aliases são os mesmos que alguns dos aliases de sua subconsulta.
Por exemplo:
select *
from ROOM r
where ...
(
select *
from ROAD r
where ...
)
Isso funciona bem, pois o alias da subconsulta parece ocultar o principal.
- Funcionará assim em todos os casos?
- Será que algum dia obterei resultados indefinidos?
- Se não há problema em fazer isso, como posso fazer uma referência à consulta principal
r
?
O tempdb de um servidor (SQL Server 2008) aumenta para mais de 500 GB várias vezes por mês. É possível descobrir quais instruções SQL causaram esse problema? O problema geralmente não é causado por create table #temp...; insert into #temp...
ou , select ... into #temp...
mas por junções complexas.
O tamanho inicial de alguns dos arquivos tempdb também é definido automaticamente para valores muito maiores todas as vezes. Como prevenir?
Às vezes, os planos em cache impedem o redimensionamento/encolhimento dos arquivos. Como descobrir qual deles contém o tempdb?