https://stackoverflow.com/questions/15266345/loop-on-tables-with-pl-pgsql-in-postgres-9-0
https://makandracards.com/zeroglosa/19659-comando-execute-para-dinamismo-no-postgresql
Para conseguir listar o número de conexões ativas no PostgreSQL utilize o comando:
select * from pg_stat_activity;
Você pode utilizar o comando count() para contar as conexões.
select count(*) from pg_stat_activity;
É possível filtrar por Banco de Dados colocando na clausula “where” o banco desejado.
Ex.:
select * from pg_stat_activity where datname = ‘NOME_DO_BANCO’;
Para finalizar conexões você pode utilizar a função abaixo passando como parâmetro o número do pid. O pid é obtido através do select na tabela pg_stat_activity.
Atenção: Esse comando não existe em versões do PostgreSQL inferiores a 8.4.
select pg_terminate_backend(pid);
Obs.: A coluna “pid” em versões inferiores a 9.2 do PostgreSQL tinha o nome de “procpid”.
É possível finalizar todas as conexões menos a sua conexão através da query abaixo.
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE pid <> pg_backend_pid();
ActiveRecord::Base.connection.tables.each do |table|
result = ActiveRecord::Base.connection.execute("SELECT id FROM #{table} ORDER BY id DESC LIMIT 1") rescue ( puts "Warning: not procesing table #{table}. Id is missing?" ; next )
ai_val = result.any? ? result.first['id'].to_i + 1 : 1
puts "Resetting auto increment ID for #{table} to #{ai_val}"
ActiveRecord::Base.connection.execute("ALTER SEQUENCE #{table}_id_seq RESTART WITH #{ai_val}")
end