PostgreSQL: Modificar PROPIETARIO en todas las tablas simultáneamente en PostgreSQL

Resuelto Kai asked hace 15 años • 26 respuestas

¿Cómo modifico el propietario de todas las tablas en una base de datos PostgreSQL?

Lo intenté ALTER TABLE * OWNER TO new_ownerpero no admite la sintaxis de asterisco.

Kai avatar Aug 28 '09 23:08 Kai
Aceptado

Puedes usar el REASSIGN OWNEDcomando.

Sinopsis:

REASSIGN OWNED BY old_role [, ...] TO new_role

Esto cambia todos los objetos de propiedad de old_roleal 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.

Trygve Laugstøl avatar Nov 23 '2012 20:11 Trygve Laugstøl

Ver REASSIGN OWNEDcomando

Nota: Como @trygvis menciona en la respuesta a continuación , el REASSIGN OWNEDcomando 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.


Alex Soto avatar Apr 21 '2010 20:04 Alex Soto