2015-12-03 16 views
6

Tôi có những người sử dụng sau postgres mà tôi có thể xem bằng cách gọi các \ du lệnh trong terminal như sau:Làm thế nào để Thả người dùng từ cơ sở dữ liệu Postgres

postgres=# \du 

          List of roles 
Role name |     Attributes     | Member of 
-----------+------------------------------------------------+----------- 
postgres | Superuser, Create role, Create DB, Replication | {} 
tutorial1 |            | {} 

Theo postgres documentation, tôi sẽ có thể thả người dùng được gọi là "tutorial1" bằng cách nhập lệnh sau:

postgres=# DROP USER tutorial1 

Tuy nhiên, khi tôi sử dụng lệnh đó không có gì xảy ra. Tài liệu không cung cấp bất kỳ gợi ý nào về lý do tại sao điều này không hoạt động, cũng như không cung cấp các ví dụ rõ ràng.

Điều đó đang được nói-- lệnh thả người dùng này là gì?

+4

'DROP ROLE tutorial1;' http://www.postgresql.org/docs/9.4/static/sql-droprole.html –

+3

Tôi giả sử bạn quên dấu chấm phẩy ở cuối câu lệnh ';' –

+3

Tất cả các câu lệnh phải kết thúc bằng một ';' –

Trả lời

1

Lệnh của bạn là ok nhưng bạn quên đặt ; ở cuối lệnh.

Hãy thử như thế này

postgres=# DROP USER tutorial1; (Note I put semicolon at the end) 
+0

Đã bỏ qua câu trả lời của bạn vì lỗi này 'ERROR: role' tutorial1 "không thể bị xóa vì một số đối tượng phụ thuộc vào nó' – kabrice

1

Nếu bạn thấy mình ở đây (như tôi) bởi vì bạn không thể thả người sử dụng, các mẫu sau đây có thể hữu ích:

REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM tutorial1; 
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM tutorial1; 
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM tutorial1; 
DROP USER tutorial1; 

Người dùng có thể có các đặc quyền trong các lược đồ khác, trong trường hợp đó bạn sẽ phải chạy dòng REVOKE thích hợp với "công khai" được thay thế bằng lược đồ đúng. Để hiển thị tất cả các lược đồ và các loại đặc quyền cho một người sử dụng, tôi thay đổi nội dung các lệnh \ dp để làm cho truy vấn này:

SELECT 
    n.nspname as "Schema", 
    CASE c.relkind 
    WHEN 'r' THEN 'table' 
    WHEN 'v' THEN 'view' 
    WHEN 'm' THEN 'materialized view' 
    WHEN 'S' THEN 'sequence' 
    WHEN 'f' THEN 'foreign table' 
    END as "Type" 
FROM pg_catalog.pg_class c 
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
WHERE pg_catalog.array_to_string(c.relacl, E'\n') LIKE '%postgres%'; 

Tôi không chắc chắn những loại đặc quyền tương ứng với thu hồi trên BẢNG, trình tự, hoặc chức năng, nhưng tôi nghĩ tất cả chúng đều thuộc một trong ba.

Các vấn đề liên quan