Cách nhanh nhất mà tôi biết là tìm kiếm trong giao diện danh mục hệ thống pg_roles
:
SELECT * FROM pg_roles WHERE rolname = 'postgres';
Nói một cách chính xác, việc sử dụng bảng bên dưới sẽ nhanh hơn một chút pg_authid
, nhưng việc truy cập vào bảng này bị hạn chế đối với các siêu nhân vì những lý do chính đáng.
Không có loại định danh đối tượng như cho bảng hoặc loại, điều này sẽ cho phép tạo kiểu đơn giản như thế 'mytable'::regclass
.
Mặc dù vậy, hãy lưu ý rằng các OID không ổn định trong chu kỳ kết xuất / khôi phục. Vì vậy, OID
không tốt cho trường hợp sử dụng!
Trong một số cơ sở dữ liệu, tôi có một login
bảng riêng với khóa chính nối tiếp mà tôi sử dụng cho các mục đích tương tự. Duy trì bằng tay. Và các chức năng sử dụng nó được chuẩn bị để thỉnh thoảng không tìm thấy người dùng trong bảng này. Một bảng rất cơ bản và nhanh chóng:
CREATE TABLE users.login (
login_id serial PRIMARY KEY
,username text NOT NULL UNIQUE
);
Khi tạo người dùng mới, tôi sử dụng hàm plpgsql để tạo người dùng mới trong hệ thống và nhập nó vào bảng của tôi cùng một lúc. Và tôi sử dụng nó login_id
ở nhiều nơi . Chẳng hạn, tôi theo dõi ai đã thực hiện thay đổi cuối cùng thành một hàng trong hầu hết các bảng. Tôi sử dụng chức năng đơn giản này:
CREATE OR REPLACE FUNCTION public.f_login_id()
RETURNS int AS
$func$
SELECT COALESCE((SELECT login_id FROM users.login
WHERE username = session_user::text), 0::int)
$func$ LANGUAGE sql STABLE;
Không có ràng buộc khóa ngoại để giữ cho mọi thứ nhanh chóng và đơn giản. Rõ ràng, tôi không cần tính toàn vẹn tham chiếu nghiêm ngặt ...