Como listar todas as restrições (chave primária, cheque, exclusivo mútuo exclusivo, ..) de uma tabela no PostgreSQL?
O erro em sua totalidade diz:
psql: não foi possível conectar ao servidor: Arquivo ou diretório inexistente. O servidor está executando localmente e aceitando conexões no soquete de domínio Unix "/tmp/.s.PGSQL.5432"?
Esta é a segunda vez que configuro o Postgresql via Homebrew no meu Mac e não tenho ideia do que está acontecendo. Anteriormente, estava funcionando. Em algum momento, devo ter digitado um comando que bagunçou as coisas. Não tenho certeza. Agora, sempre que insiro um comando SQL na linha de comando, recebo a mensagem acima. Eu executei um comando para verificar se o servidor está rodando, e aparentemente não está. Se eu tentar iniciar o servidor usando
$ postgres -D /usr/local/pgsql/data
Eu recebo o seguinte erro:
postgres não pode acessar o arquivo de configuração do servidor "/usr/local/pgsql/data/postgresql.conf": Arquivo ou diretório inexistente
Já desinstalei e reinstalei o Postgresql via Homebrew, mas o problema persiste. Estou completamente sem saber como fazer isso funcionar. Qualquer ajuda seria apreciada.
Eu tenho um banco de dados Postgres que contém detalhes sobre clusters de servidores, como status do servidor ('ativo', 'em espera' etc). Servidores ativos a qualquer momento podem precisar fazer failover para um modo de espera, e não me importo com qual modo de espera é usado em particular.
Quero que uma consulta de banco de dados altere o status de um standby - APENAS UM - e retorne o IP do servidor que deve ser utilizado. A escolha pode ser arbitrária: como o status do servidor muda com a consulta, não importa qual standby está selecionado.
É possível limitar minha consulta a apenas uma atualização?
Aqui está o que eu tenho até agora:
UPDATE server_info SET status = 'active'
WHERE status = 'standby' [[LIMIT 1???]]
RETURNING server_ip;
Postgres não gosta disso. O que eu poderia fazer diferente?
Eu tenho MM Replication no mysql, e quero espremer algum espaço livre na caixa estar excluindo arquivos desnecessários, me deparei com esses mysql-bin
arquivos dentro /var/db/mysql/
Existem centenas desses arquivos como mysql-bin.000123
, mysql-bin.000223
etc. Eu verifiquei a replicação do mysql fazendo show master status
e show slave status
eles estão usando alguns arquivos mysql-bin em certas posições, mas acho que todos os outros arquivos bin são sobras que não serão mais usadas. Nesse caso, é seguro excluir todos os arquivos mysql-bin, exceto aqueles para os quais a replicação está apontando atualmente?
Se for seguro excluir, há algo que eu possa fazer para excluir automaticamente esses arquivos quando não estiverem em uso?
Eu tenho uma tabela PostgreSQL. select *
é muito lento enquanto select id
é bom e rápido. Acho que pode ser que o tamanho da linha seja muito grande e esteja demorando para transportar, ou pode ser algum outro fator.
Eu preciso de todos os campos (ou quase todos eles), então selecionar apenas um subconjunto não é uma solução rápida. A seleção dos campos que desejo ainda é lenta.
Aqui está meu esquema de tabela menos os nomes:
integer | not null default nextval('core_page_id_seq'::regclass)
character varying(255) | not null
character varying(64) | not null
text | default '{}'::text
character varying(255) |
integer | not null default 0
text | default '{}'::text
text |
timestamp with time zone |
integer |
timestamp with time zone |
integer |
O tamanho do campo de texto pode ser de qualquer tamanho. Mas ainda assim, não mais do que alguns kilobytes na pior das hipóteses.
Perguntas
- Existe algo sobre isso que grita 'louco ineficiente'?
- Existe uma maneira de medir o tamanho da página na linha de comando do Postgres para me ajudar a depurar isso?
Eu escrevi um script para REINDEX
índices em um banco de dados. Aqui está um deles:
echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
exit 1
fi
O problema é que não consigo executar este script no modo autônomo. psql
está solicitando a senha toda vez que é executado. Há também duas limitações:
Não consigo criar um usuário no banco de dados sem senha.
Como
REINDEX
trava as tabelas, devo usarsleep <num>
entre cadaREINDEX
.
Existe alguma solução automática?
Eu tive que escrever uma consulta simples onde procuro o nome das pessoas que começam com B ou D :
SELECT s.name
FROM spelers s
WHERE s.name LIKE 'B%' OR s.name LIKE 'D%'
ORDER BY 1
Eu queria saber se existe uma maneira de reescrever isso para se tornar mais performático. Para que eu possa evitar or
e/ou like
?
Lembro-me de ler este artigo sobre design de banco de dados e também me lembro de dizer que você deve ter propriedades de campo NOT NULL. Eu não me lembro porque este foi o caso embora.
Tudo o que consigo pensar é que, como desenvolvedor de aplicativos, você não precisaria testar NULL e um possível valor de dados inexistente (por exemplo, uma string vazia para strings).
Mas o que você faz no caso de datas, datetime e time (SQL Server 2008)? Você teria que usar alguma data histórica ou de fundo.
Alguma idéia sobre isso?
O carimbo de data/hora do Unix é o número de segundos desde a meia-noite UTC de 1º de janeiro de 1970.
Como obtenho o timestamp unix correto do PostgreSQL?
Ao comparar com currenttimestamp.com e timestamp.1e5b.de , não recebo o tempo esperado do PostgreSQL:
Isso retorna o timestamp correto:
SELECT extract(epoch from now());
Enquanto isso não:
SELECT extract(epoch from now() at time zone 'utc');
Eu moro no fuso horário UTC +02. Qual é a maneira correta de obter o timestamp unix atual do PostgreSQL?
Isso retorna a hora e o fuso horário corretos:
SELECT now();
now
-------------------------------
2011-05-18 10:34:10.820464+02
Outra comparação:
select now(),
extract(epoch from now()),
extract(epoch from now() at time zone 'utc');
now | date_part | date_part
-------------------------------+------------------+------------------
2011-05-18 10:38:16.439332+02 | 1305707896.43933 | 1305700696.43933
(1 row)
Unix timestamp from the web sites:
1305707967
Estou executando uma ferramenta de auto-indexação em nosso banco de dados MS SQL (modifiquei um script originário da Microsoft que analisa as tabelas de estatísticas de índice - Automated Auto Indexing ). A partir das estatísticas, agora tenho uma lista de recomendações para índices que precisam ser criados.
Edit: Os índices descritos acima pegam informações dos DMVs que informam o que o mecanismo de banco de dados usaria para índices se estivessem disponíveis e os scripts pegam as recomendações Top x (por buscas, impacto do usuário etc.) e as colocam em uma tabela.
(Edit acima parcialmente retirado da resposta de Larry Coleman abaixo para esclarecer o que os scripts estão fazendo)
Como sou novo no administrador de banco de dados e, depois de fazer uma pesquisa rápida na rede, estou relutante em mergulhar e adicionar cegamente os índices recomendados. No entanto, não tendo experiência na área, estou procurando alguns conselhos sobre como determinar se as recomendações são necessárias ou não.
Preciso executar o SQL Profiler ou é melhor examinar o código que consulta as tabelas? E você tem alguma outra dica?