Gerenciador MySQL para Linux

26/03/07

Quem usa/usou Windows e tinha que mexer com banco de dados MySQL provavelmente usou o MySQL-Front, descontinuado por pressão da própria MySQL. Hoje, uma alternativa é o SQLyog.

A verdade é que sempre quis um programa assim para Linux. Aquele gerenciador — MySQL Administrator — criado pela MySQL é horrível. Tudo muito complicado de fazer. E não é que procurando por algum outro gerenciador, encontrei o Emma?

Atalhos semelhantes ao falecido MySQL-Front, interface simples de usar, ou seja, exatamente do jeito que eu queria! No Ubuntu, basta rodar o comando abaixo para instalá-lo:

$~ sudo aptitude install emma

Não sei te dizer em qual repositório este pacote está localizado, então, se você não encontrá-lo lembre-se de habilitar os repositórios universe e multiverse.

MS-SQL Server: ruim como tudo o que a Microsoft faz

04/01/07

É incrível mas tudo o que a Microsoft faz é um lixo. Não consigo lembrar de nada que me faça dizer "Nossa, eles detonaram com ____ (seu aplicativo aqui)".

Estou fazendo um job que, infelizmente, deve ser feito em SQL Server. Como não conheço muito sobre ele, estou fazendo as coisas direto em SQL, sem usar procedures, view ou outra feature mais complicada/avançada.

Em um certo momento, precisei fazer um LEFT JOIN com COUNT. O problema é que o SQL Server é tão burro que preciso definir cada campo que não faz parte da agregação na cláusula GROUP BY. Mas adivinha… Isso modifica o resultado!

Para ilustrar, veja um exemplo de "tópicos" e "respostas".

CREATE TABLE topics (
	id INT(11) AUTO_INCREMENT NOT NULL,
	title VARCHAR(255)
);
 
CREATE TABLE replies (
	id INT(11) AUTO_INCREMENT NOT NULL,
	topic_id INT(11)
	title VARCHAR(255)
);
 
 
INSERT INTO topics (title) VALUES ('Topic #1');
INSERT INTO topics (title) VALUES ('Topic #2');
INSERT INTO replies (title, topic_id) VALUES ('Reply topic #2', 2);

Se eu fizesse a seguinte seleção, deveria me retornar o tópico com a quantidade de respostas:

SELECT
    topics.title AS title,
    COUNT(replies.id) AS replies
FROM 
    topics
LEFT JOIN replies ON
    topics.id = replies.topic_id
GROUP BY
    replies.id;
title: Topic #1, replies: 0
title: Topic #2, replies: 1

Isso funciona no MySQL e provavelmente deve funcionar no PostgreSQL. Mas no MS-SQL Server recebo a seguinte mensagem:

Server: Msg 8120, Level 16, State 1, Line 1
Column 'topics.title' is invalid in the select list because it is not 
contained in either an aggregate function or the GROUP BY clause.

E tem gente que ainda paga caro por isso!

Definindo o fuso horário no Rails

26/12/06

Se você hospeda seu projeto em um servidor que não está alocado no Brasil, pode ter problemas com o fuso horário. Uma solução é fazer esta definição manualmente, tanto para o Rails, quanto para o MySQL.

No arquivo "environment.rb", adicione a seguinte linha:

ENV['TZ'] = 'America/Sao_Paulo'

No arquivo "application.rb", presente no diretório "app/controllers", adicione:

before_filter :set_timezone
 
def set_timezone
    ActiveRecord::Base.connection.execute "SET GLOBAL time_zone='-3:00'"
end

Uma outra solução possível, caso você seja o dono do servidor, é definir isso no arquivo "my.cfn". O grande problema é que isso não pode ser feito por usuários em planos compartilhados (isso é o que me foi dito pelo suporte da RailsPlayground). Veja mais informações sobre isto nos links abaixo.