postgresql - workers - odoo 8 docs
No puedo duplicar o eliminar la base de datos de la interfaz Odoo porque hay sesiones que usan la base de datos. ¿Cómo arreglarlo permanentemente? (2)
Cada vez que trato de duplicar o eliminar bases de datos de la interfaz siempre obtengo este error, incluso si todos los usuarios están desconectados:
ERROR: source database "database_name" is being accessed by other users
DETAIL: There are 5 other sessions using the database.
Entonces, si desea duplicar o eliminar una base de datos, debo ejecutar esta consulta para finalizar todas las conexiones antes:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = ''database_name'' AND pid <> pg_backend_pid();
Lo que me gustaría hacer es anular los siguientes controladores para ejecutar la consulta siempre antes de la ejecución de las funciones duplicate_database
y drop
:
@http.route(''/web/database/duplicate'', type=''json'', auth="none")
def duplicate(self, fields):
params = dict(map(operator.itemgetter(''name'', ''value''), fields))
duplicate_attrs = (
params[''super_admin_pwd''],
params[''db_original_name''],
params[''db_name''],
)
return request.session.proxy("db").duplicate_database(*duplicate_attrs)
@http.route(''/web/database/drop'', type=''json'', auth="none")
def drop(self, fields):
password, db = operator.itemgetter(
''drop_pwd'', ''drop_db'')(
dict(map(operator.itemgetter(''name'', ''value''), fields)))
try:
if request.session.proxy("db").drop(password, db):
return True
else:
return False
except openerp.exceptions.AccessDenied:
return {''error'': ''AccessDenied'', ''title'': ''Drop Database''}
except Exception:
return {''error'': _(''Could not drop database !''), ''title'': _(''Drop Database'')}
Y encontré esta nota en la Documentación de Odoo :
[...] Esta operación requiere que no haya conexión con la base de datos que se está duplicando, pero Odoo no rompe actualmente las conexiones existentes / pendientes, por lo que reiniciar el servidor es la forma más sencilla de garantizar que todo esté en el estado correcto.
¿Es seguro anular estos controladores? ¿Cuál es la mejor manera de hacer esto? Me gustaría hacer esto usando la interfaz porque si lo hago manualmente o si tengo que detener el servidor cada vez que lo necesito es muy molesto.
No puede abandonar la base de datos de postgres mientras los clientes están conectados a ella. Una forma bastante robusta de evitarlo, es
Asegúrate de que nadie pueda conectarse a esta base de datos
update pg_database set datallowconn = ''false'' where datname = ''mydb'';
Forzar la desconexión de todos los clientes conectados a esta base de datos.
Para postgres <9.2:
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = ''mydb'';
para las versiones de postgres> = 9.2 cambiar procpid a pid:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = ''mydb'';
Déjalo caer
DROP DATABASE mydb;
Los pasos 1 y 2 requieren privilegios de superusuario, el paso 3 requiere privilegio de propietario de la base de datos.
No puede hacerlo todo solo con la utilidad dropdb, que es un simple contenedor de consultas del servidor DROP DATABASE.
Vaya a la base de datos postgresql y haga clic con el botón derecho en su base de datos, obtendrá la opción de colocar / eliminar su base de datos. En ese momento, si obtiene este error, intente detener el servidor odoo de la lista de servicios y vuelva a intentarlo.