To change the owner of a database we have found this solution:
UPDATE pg_database SET datdba=(SELECT usesysid FROM pg_shadow WHERE usename='new_owner') WHERE datname='db_name';
http://archives.postgresql.org/pgsql-admin/2003-07/msg00301.php
* From: Tom Lane
* To: Devrim GUNDUZ
* Subject: Re: changing ownership of db
* Date: Tue, 29 Jul 2003 17:41:08 -0400
Devrim GUNDUZ writes:
> On Tue, 29 Jul 2003, Benjamin Thelen (CCGIS) wrote:
>> I would like to change the ownership of a database.
> UPDATE pg_database SET datdba=(SELECT usesysid FROM pg_shadow WHERE
> usename='new_owner') WHERE datname='db_name';
That is all you need to do --- it's the only place CREATE DATABASE
records the owner's identity.
> If you also want to change the owner of the tables, update pg_class:
> UPDATE pg_class SET relowner=(SELECT usesysid FROM pg_shadow WHERE
> usename='new_owner') WHERE relname IN (SELECT relname from
> pg_class WHERE relname NOT LIKE 'pg_%');
This is likely to be a very bad idea, especially if you give ownership
of the system tables to a non-superuser. Ownership of those tables
stays with the postgres user during a CREATE DATABASE.
regards, tom lane