Làm thế nào để thay đổi chủ sở hữu của cơ sở dữ liệu PostgreSql?


205

Tôi cần thay đổi chủ sở hữu của cơ sở dữ liệu PostgreSql.

Làm cách nào để thay đổi chủ sở hữu cơ sở dữ liệu PostgreSql trong phppgadmin?

Câu trả lời:


345
ALTER DATABASE name OWNER TO new_owner;

Xem mục hướng dẫn của Postgresql về điều này để biết thêm chi tiết.


3
Để hoàn thiện, đây là một phần của tài liệu hướng dẫn tài liệu này: postgresql.org/docs/civerse/static/sql-alterdatabase.html
a_horse_with_no_name

17
@ mArtinko5MB: Điều đó là không thể, ALTER không DROP cơ sở dữ liệu.
Frank Heikens

17
@ mArtinko5MB: Cũng không thể, ALTER TABLE không DROP bảng. Cho chúng tôi thấy SQL của bạn, một cái gì đó bị hỏng nặng trong các câu lệnh của bạn.
Frank Heikens

18
Lưu ý, tất cả các bảng và trình tự bên trong cơ sở dữ liệu sẽ vẫn được gán cho chủ sở hữu ban đầu.
Cerin

2
ERROR: must be member of role ...= KHÔNG LÀM VIỆC VỚI RDS
StartupGuy

49

Câu trả lời của Frank Heikens sẽ chỉ cập nhật quyền sở hữu cơ sở dữ liệu. Thông thường, bạn cũng muốn cập nhật quyền sở hữu các đối tượng chứa (bao gồm cả bảng). Bắt đầu với Postgres 8.2, REASSIGN OWNED có sẵn để đơn giản hóa công việc này.

EDIT QUAN TRỌNG!

Không bao giờ sử dụng REASSIGN OWNEDkhi vai trò ban đầu là postgres, điều này có thể làm hỏng toàn bộ thể hiện DB của bạn. Lệnh sẽ cập nhật tất cả các đối tượng với chủ sở hữu mới, bao gồm tài nguyên hệ thống (postgres0, postgres1, v.v.)


Đầu tiên, kết nối với cơ sở dữ liệu quản trị và cập nhật quyền sở hữu DB:

psql
postgres=# REASSIGN OWNED BY old_name TO new_name;

Đây là một ALTER DATABASElệnh tương đương toàn cầu được cung cấp trong câu trả lời của Frank, nhưng thay vì cập nhật một DB cụ thể, nó thay đổi quyền sở hữu của tất cả các DB thuộc sở hữu của 'old_name'.

Bước tiếp theo là cập nhật quyền sở hữu bảng cho mỗi cơ sở dữ liệu:

psql old_name_db
old_name_db=# REASSIGN OWNED BY old_name TO new_name;

Điều này phải được thực hiện trên mỗi DB thuộc sở hữu của 'old_name'. Lệnh sẽ cập nhật quyền sở hữu của tất cả các bảng trong DB.


7
Đẹp! ... trừ khi chủ sở hữu là postgres, chính anh ta ... Đã học được điều đó một cách khó khăn.
Chris

1
Vấn đề là nó không thay đổi chủ sở hữu của một cơ sở dữ liệu, nhưng nó thay thế chủ sở hữu ở mọi nơi bằng cơ sở dữ liệu mới.
Michael003

REASSIGN OWNED ở trên sẽ thay đổi tất cả cơ sở dữ liệu (nếu có nhiều cơ sở dữ liệu) trong cùng một thể hiện sang vai trò mới.
varun7447

Để biết cách thay thế REASSIGN OWNED(thường là vì chủ sở hữu của bạn postgres), hãy xem đoạn trích trong stackoverflow.com/a/2686185/1839209 .
Michael Herrmann
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.