Estou pensando em armazenar o OID do usuário na coluna "proprietário" de uma tabela, para não precisar fazer nada se eles alterarem o nome de usuário.
Entendo que se pode usar pg_has_role() com OIDs, então isso é bom.
Existe uma maneira rápida e fácil de obter o OID do usuário atual sem apenas compará-lo com uma das tabelas do sistema?
A maneira mais rápida que conheço é uma pesquisa na exibição do catálogo do sistema
pg_roles
:Estritamente falando, seria até um pouco mais rápido usar a tabela subjacente
pg_authid
, mas o acesso a ela é restrito a superusuários por bons motivos.Não há nenhum tipo de identificador de objeto como para tabelas ou tipos, o que permitiria uma conversão simples como
'mytable'::regclass
.Esteja ciente, porém, de que os OIDs não são estáveis em um ciclo de despejo/restauração. Portanto,
OID
não é bom para o caso de uso!Em alguns bancos de dados, tenho uma
login
tabela separada com uma chave primária serial que uso para fins semelhantes. Mantido manualmente. E as funções que a utilizam estão preparadas para ocasionalmente não encontrar um usuário nesta tabela. Uma tabela bem básica e rápida:Ao criar novos usuários eu uso uma função plpgsql que cria o novo usuário no sistema e o insere na minha tabela ao mesmo tempo. E eu uso isso
login_id
em muitos lugares . Por exemplo, eu acompanho quem fez a última alteração em uma linha na maioria das tabelas. Eu uso esta função simples:Sem restrições de chave estrangeira para manter as coisas rápidas e simples. Obviamente, não preciso de integridade referencial estrita ...