1. Jika pengguna secara tidak sengaja membuat semua objeknya dengan super-user(postgres), dan kemudian berniat untuk mengubah ke pengguna lain, maka REASSIGN OWNED BY tidak akan berfungsi dan hanya error sebagai:
postgres=# reassign owned by postgres to user1;
ERROR: cannot reassign ownership of objects owned by role postgres because they are required by the database system
2. Jika pengguna ingin mengubah hanya satu skema objek kepemilikan.
Baik kasus mengubah objek, dari pengguna "postgres" ke pengguna lain atau hanya mengubah hanya satu objek skema, kita perlu mengulang setiap objek dengan mengumpulkan detail objek dari pg_catalog's &information_schema dan memanggil ALTER TABLE / FUNCTION / AGGREGATE / TYPE dll.
Saya menyukai teknik tweaking pg_dump output menggunakan perintah OS(sed/egrep), karena diketahui bahwa pg_dump secara alami menulis ALTER .. OWNER TO setiap objek (TABLES / SEQUENCES / VIEWS / FUNCTIONS / AGREGATES / TYPE ) dalam keluarannya. Menyerap pernyataan-pernyataan itu dari pg_dump stdout dengan mengganti USER/SCHEMANAME baru dengan sed dan kemudian meneruskan kembali pernyataan-pernyataan itu ke klien psql akan memperbaiki hal-hal itu bahkan jika objek itu dimiliki oleh pengguna Postgres. Saya menggunakan pendekatan yang sama dalam skrip dan mengizinkan pengguna untuk meneruskan NAMA PENGGUNA BARU dan NAMA SKEMA, jadi untuk menggantinya dalam pernyataan ALTER…OWNER TO...
Penggunaan dan keluaran skrip:
sh change_owner.sh -n new_rolename -S schema_name
-bash-4.1$ sh change_owner.sh -n user1 -S public
Summary:
Tables/Sequences/Views : 16
Functions : 43
Aggregates : 1
Type : 2
Anda dapat mengunduh skrip dari sini, dan ada juga README untuk membantu Anda dalam penggunaan.