Eu só estou querendo saber se existe um método estabelecido para testar se uma string pode ser usada como um identificador PostgreSQL sem aspas ? (sem aspas porque quase qualquer string pode ser um identificador entre aspas).
Pergunto porque como mostrado em uma pergunta anterior ( Como citar nome de tabela qualificado com função format()? ), há momentos em que eu precisaria especificar um identificador (como o nome de uma tabela a ser criada) que não ainda existem, como valores de string ( text
) em vez de um tipo mais seguro, como regclass
. Citar a string/nome pode ser problemático, como mostrado lá e provavelmente em outros lugares. Sem citar, é suscetível à injeção de SQL.
Eu acho que se alguém programar com força suficiente, uma função de análise de string pode ser escrita em última análise. Só queria verificar se existem soluções existentes.
Relacionado:
Quais são os formatos válidos de um nome de esquema PostgreSQL?
A função PARSENAME() é o oposto de QUOTENAME() (sql-server)
Aqui está o que acabei usando com base no comentário de @a_horse_with_no_name.
A ideia é que a
format
função (com%I
) não adicione aspas se for desnecessário (ou seja, quando a entrada já for um identificador simples). Também normalizei os nomes dos identificadores para letras minúsculas usandolower()
antes da comparação, o que pode ou não ser desejável, dependendo se os identificadores devem ser insensíveis a maiúsculas ou minúsculas.Saída de amostra: