Finalizando processos no banco postgresql

Mini-bomba do dia:

Rotina de exclusão de banco/usuario postgres não era executada quando haviam conexões em idle ou queries sendo executadas no momento.

Depois de um tempo de pesquisa eis a solução:

SELECT pg_cancel_backend(procpid) FROM pg_stat_activity WHERE usename = 'BANCO_DE_DADOS';
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE usename = 'BANCO_DE_DADOS';

Bonus stage:
Para visualizar as conexões ativas e garantir que matou todos os pids:

select * from pg_stat_activity WHERE datname='BANCO_DE_DADOS';

Atualização: a function pg_terminate_backend() só funciona em postgre 8.4 ou superior, logo estou procurando outra opção via query  em versões antigas, pois matar os pids via kill não eh uma alternativa no que estou fazendo.

Exibindo e escondendo dinamicamente TR em uma tabela

Custei mas achei, eu tinha uma tabela com algumas TR escondidas via style, porém ao tirar eslas do “display:none” via javascript ficava desalinhado (todo o conteúdo da TR em uma única TD)

Fuçando muito, descobri o problema, o motor de renderização Trident (IE) utiliza  a propriedade block para exibir de forma generica, já os motores webkit (chrome, safari, etc) e gecko (firefox) utilizam “table-row”,

A função salvadora da pátria abaixo:

<script>
function toggle(id){
	if (document.getElementById && document.createTextNode)
	{
		var tr=document.getElementById(id);
		if (tr) {
			if (tr.style.display == 'none') {
				try {
					tr.style.display='table-row';
				} catch(e) {
					tr.style.display = 'block';
				}
			}
			else {
				tr.style.display = 'none';
			}
		}
	}
}
</script>

Atualização 21/03/2012:
Pra usar em uma TD, basta substituir table-row por table-cell

Bloqueio de Bad User Agent via htaccess ou httpd.conf

Notei diversos atauqes a servidores usando os identificadores “Mozilla/3.0 (compatible; Indy Library)” , “HTTP Client“, “libwww” e “havij” então decidí bloqueá-los permanetntemente, no meu caso useu a configuração diretamente no httpd.conf do servidor, mas também pode ser realizado via .htaccess

 

SetEnvIfNoCase User-Agent ^Mozilla.*Indy badUA
SetEnvIfNoCase User-Agent "HTTP Client" badUA
SetEnvIfNoCase User-Agent ^.*Havij badUA
SetEnvIfNoCase User-Agent "libwww-perl" badUA
Order Allow,Deny
Allow from all
Deny from env=badUA

Algumas informações que achei na net:

Indy Library – Normalmente essas requisições vem de suites de ferramentas da borland para delfi/c++
HTTP Client – Requisições genericas
libwww – Vem da lib Perl::LWP (Library for WorldWideWeb in Perl)
Havij – Ferramenta para testes de segurança em websites, usado normalmente para ataques via sql injection (em breve um post sobre a ferramenta)

———————————————-
Posted Listening: “Doctor Doctor – UFO”

Descendo ips invalidos via /sbin/ip

Ambiente Operacional: CentOS

Hoje ocorreu um problema de IP conflitante, porém ao executar /sbin/ifconfig não existia no servidor o IP que eu estava procurando.

Depois de muito fuçar no servidor, rodei o /sbin/ip e lá estava o IP como eth1 secundário.

Depois de um bocado de leitura do man (não estava disponível via shell, achei online) achei o comando pra descer a interface via ip

ip addr del 189.xx.xx.xx/24 dev eth1

A única ressalva é que o formato do ip tem que estar exatamente igual ao executar/sbin/ip addr dhow

———————————————-
Posted Listening: “Cliffs of Dover – Eric Johnson”

Tabela de cores em HTML

Essa é pra quem fica perdido na hora de inserir uma cor via style ou css, possui os códigos e os exemplos de cada cor, o que torna visualmente fácil a escolha =D

http://www.cultura.ufpa.br/dicas/htm/htm-cor1.htm

———————————-
Atualização 15/08/2012
Mais um link com tabela de cores:

http://www.mxstudio.com.br/Conteudos/Dreamweaver/Cores.htm

Deletar registros com mais de 30 dias

Essa é básica, mas vejo muita gente se quebrando e fazendo códigos mirbolantes via script pra isso.

Para deletar qualquer registro com mais de 30 dias somente usando SQL (não esqueça de substituir o campo `date` pelo nome do campo que irá utilizar e `minha_tabela` pelo nome da tabela.

DELETE FROM `minha_tabela` WHERE `date` < DATE_SUB(NOW(), INTERVAL 30 DAY);

———————————————-
Posted Listening: “The Evil That Men Do – Iron Maiden”