PostgreSQL: Modificar PROPIETARIO en todas las tablas simultáneamente en PostgreSQL
¿Cómo modifico el propietario de todas las tablas en una base de datos PostgreSQL?
Lo intenté ALTER TABLE * OWNER TO new_owner
pero no admite la sintaxis de asterisco.
Puedes usar el REASSIGN OWNED
comando.
Sinopsis:
REASSIGN OWNED BY old_role [, ...] TO new_role
Esto cambia todos los objetos de propiedad de old_role
al nuevo rol. No tienes que pensar en qué tipo de objetos tiene el usuario, todos se cambiarán. Tenga en cuenta que solo se aplica a objetos dentro de una única base de datos. Tampoco altera el propietario de la base de datos.
Está disponible desde al menos 8.2. Su documentación en línea sólo se remonta a ese punto.
Ver REASSIGN OWNED
comando
Nota: Como @trygvis menciona en la respuesta a continuación , el REASSIGN OWNED
comando está disponible al menos desde la versión 8.2 y es un método mucho más sencillo.
Dado que está cambiando la propiedad de todas las tablas, es probable que también desee vistas y secuencias. Esto es lo que hice:
Mesas:
for tbl in `psql -qAt -c "select tablename from pg_tables where schemaname = 'public';" YOUR_DB` ; do psql -c "alter table \"$tbl\" owner to NEW_OWNER" YOUR_DB ; done
Secuencias:
for tbl in `psql -qAt -c "select sequence_name from information_schema.sequences where sequence_schema = 'public';" YOUR_DB` ; do psql -c "alter sequence \"$tbl\" owner to NEW_OWNER" YOUR_DB ; done
Puntos de vista:
for tbl in `psql -qAt -c "select table_name from information_schema.views where table_schema = 'public';" YOUR_DB` ; do psql -c "alter view \"$tbl\" owner to NEW_OWNER" YOUR_DB ; done
Probablemente podrías SECAR eso un poco ya que las declaraciones de modificación son idénticas para los tres.