Em nosso aplicativo, verificamos na inicialização,
se existir uma tabela postgresql, caso contrário, nós a criamos e, em seguida, ativamos a segurança em nível de linha
Se existir, ainda não temos certeza se a segurança em nível de linha é verdadeira ou não
Portanto, sempre precisamos verificar se a segurança em nível de linha está habilitada e, caso contrário, precisamos habilitá-la.
Agora, existem duas maneiras de fazer isso (poderia haver mais, mas estas são as duas maneiras que poderíamos pensar):
ALTER TABLE <tname> enable row level security;
Ou podemos fazer
SELECT rowsecurity FROM pg_tables WHERE tablename = <tname>
e somente se retornarfalse
, executeALTER TABLE
from (1).
A questão que temos é: a opção (2) tem melhor desempenho do que a opção (1) ou está apenas complicando as coisas sem melhorar o desempenho para startups subsequentes?
Essa verificação acontecerá na inicialização de cada aplicativo.
Acho que ambas as opções são boas do ponto de vista do desempenho.
Eu ainda optaria pela segunda opção, porque essa
ALTER TABLE
afirmação travaACCESS EXCLUSIVE
na mesa. Esse bloqueio entrará em conflito com todas as instruções simultâneas que acessam a tabela e interromperá o processamento de autovacuum na tabela se for executado com muita frequência. Portanto, é preferível executar aALTER TABLE
declaração no máximo com a frequência necessária.