Não consigo encontrar documentação que descreva os formatos válidos de um nome de esquema PostgreSQL. Eu sei que um nome de esquema não pode:
- comece com um número
- ter espaços
- começar com
pg_
O que mais? Onde devo procurar?
Não consigo encontrar documentação que descreva os formatos válidos de um nome de esquema PostgreSQL. Eu sei que um nome de esquema não pode:
pg_
O que mais? Onde devo procurar?
De acordo com a boa documentação , acho que isso pode ser o que você está procurando.
A resposta correta é a fornecida por gsiems. No entanto, quero salientar que o PostgreSQL tem regras sobre identificadores citados que você deve ter em mente. "Identificadores entre aspas podem conter qualquer caractere, exceto o caractere com código zero. (Para incluir aspas duplas, escreva duas aspas duplas.)" ... Há também algumas restrições sobre maiúsculas e minúsculas.
Portanto, se você for citar seus identificadores, poderá usar qualquer caractere que desejar (com exceção de \0). Mas se você não está citando seus identificadores, você deve seguir as regras descritas nessa página.
Eu queria apontar isso principalmente porque já me mordeu antes, especialmente as regras relativas a maiúsculas e minúsculas em identificadores não citados (e nomes de esquema contam como identificadores).
ATUALIZAR:
Como exemplo (não aplicável especificamente a identificadores de esquema, mas igualmente aplicável a eles):
Este pode ser um comportamento esperado para aqueles que têm experiência com PostgreSQL (e talvez os padrões SQL), mas alguém que é novo no PG e vem do ponto de vista de outros servidores de banco de dados (SQL Server ou Oracle por exemplo) pode se deparar com esse comportamento e pergunto por que a tabela que eles acabaram de criar está faltando.
Talvez alguns manuais recomendem o uso de identificadores entre aspas, mas o fato é que os identificadores entre aspas estão disponíveis para uso e podem ser usados e, além disso, muitos pacotes fazem uma política de sempre usar identificadores entre aspas ao criar e acessar relações que não são inteiramente em minúsculas, por exemplo, PGAdmin III.
Por exemplo, este é o script gerado pelo PGAdmin III ao criar uma tabela através da UI:
Portanto, a única maneira de um usuário acessar essa tabela em uma consulta é consultando seu identificador entre aspas, ou seja,
"TBLUSER"
. Tentar acessar esta tabela em uma consulta com um identificador sem aspas resultará em falha na localização da relação, ou seja,TBLUSER
.De acordo com a documentação , ele também não pode começar
pg_
porque está reservado. Fora isso, parece bastante livre.