PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara mengubah semua kepemilikan objek dalam skema tertentu di PostgreSQL?

Sedikit saran di sini (Terima kasih), menginspirasi saya untuk membuat skrip bash untuk mengubah semua (TABEL / URUTAN / PANDANGAN / FUNGSI / AGREGAT / JENIS) kepemilikan dalam skema tertentu sekaligus. Tidak ada kode khusus yang disertakan dalam skrip, pada dasarnya saya memilih teknik yang disarankan dan menyederhanakan metode implementasi melalui skrip. Sebenarnya, perintah REASSIGN OWNED BY melakukan sebagian besar pekerjaan dengan lancar, namun, itu mengubah kepemilikan objek di seluruh basis data terlepas dari skema apa pun. Dua kemungkinan, di mana Anda tidak dapat menggunakan REASSIGN OWNED BY:

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Evolusi Fault Tolerance di PostgreSQL:Synchronous Commit

  2. Mengonversi dari Replikasi Asinkron ke Sinkron di PostgreSQL

  3. Memasukkan string teks dengan hex ke dalam PostgreSQL sebagai byte

  4. Kesalahan:Tidak ada modul bernama psycopg2.extensions

  5. Cara Mengelola Database PostgreSQL Anda Dari ClusterControl CLI