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.

Inserindo dados de um select multiplo no banco de dados

Para que o php reconheça todas as opções setadas em um select múltiplo, devemos por [] após o nome do select

<form method=POST...>
<select name=estados[]' multiple>
<option value='SP'>SP</option>
<option value='RJ'>RJ</option>
<option value='RS'>RS</option>
</select>
</form>

Para campos do tipo SET no MySQL, basta usar um implode pra popular os dados:

<?php
$estados = implode(',', $_POST['estados']);

Visualizar todas as chaves estrangeiras (foreign keys) do banco de dados

SQL Pra listar todas as chaves estrangeiras criadas

select
CONSTRAINT_NAME as 'foreign_name',
concat(table_name, '.', column_name) as 'foreign _key',
concat(referenced_table_name, '.', referenced_column_name) as 'references'
from
information_schema.key_column_usage
where
referenced_table_name is not null;

OBS: Deve ter um jeito mais fácil, mas esse quebra bem o galho 😉

———————————————-
Posted Listening: “Hot for Teacher – Van Hallen”