Parece que no puedo encontrar documentación que describa los formatos válidos de un nombre de esquema PostgreSQL. Sé que un nombre de esquema no puede:
- comenzar con un número
- tener espacios
- Empezar con
pg_
¿Qué más? ¿Dónde debería mirar?
Parece que no puedo encontrar documentación que describa los formatos válidos de un nombre de esquema PostgreSQL. Sé que un nombre de esquema no puede:
pg_
¿Qué más? ¿Dónde debería mirar?
Respuestas:
Según la fina documentación , creo que esto podría ser lo que estás buscando.
Los identificadores de SQL y las palabras clave deben comenzar con una letra (az, pero también letras con signos diacríticos y letras no latinas) o un guión bajo (_). Los caracteres posteriores en un identificador o palabra clave pueden ser letras, guiones bajos, dígitos (0-9) o signos de dólar ($). Tenga en cuenta que los signos de dólar no están permitidos en los identificadores de acuerdo con la letra del estándar SQL, por lo que su uso puede hacer que las aplicaciones sean menos portátiles ...
pg_
subrayado a ese enlace, como Nathan C mencionado .
Según la documentación , tampoco puede comenzar pg_
ya que está reservado. Aparte de eso, se ve bastante libre.
this-is schema
y seguiría siendo un nombre de esquema no válido.
La respuesta correcta es la proporcionada por gsiems. Sin embargo, quiero señalar que PostgreSQL tiene reglas sobre identificadores entre comillas que debe tener en cuenta. "Los identificadores entre comillas pueden contener cualquier carácter, excepto el carácter con código cero. (Para incluir una comilla doble, escriba dos comillas dobles)." ... También hay algunas restricciones en caso de que desee ver.
Entonces, si va a citar sus identificadores, puede usar cualquier carácter que desee (con la excepción de \ 0). Pero si no está citando sus identificadores, debe seguir las reglas descritas en esa página.
Quería señalar esto principalmente porque me ha mordido antes, especialmente las reglas relativas a mayúsculas y minúsculas en identificadores no citados (y los nombres de esquema cuentan como identificadores).
ACTUALIZAR:
Como ejemplo (no específicamente aplicable a los identificadores de esquema, pero igualmente aplicable a ellos):
DROP TABLE "tbluser"; -- assuming it exists
DROP TABLE "TBLUSER"; -- assuming it exists; incidentally, they are two different tables
CREATE TABLE "TBLUSER" ( username text );
INSERT INTO "TBLUSER" VALUES ( 'joe' );
SELECT * FROM TBLUSER; -- this returns an error that the tbluser relation does not exist
SELECT * FROM "TBLUSER"; -- works fine
Este podría ser el comportamiento esperado para aquellos que tienen experiencia con PostgreSQL (y tal vez los estándares SQL), pero alguien que es nuevo en PG y viene del punto de vista de otros servidores de bases de datos (SQL Server u Oracle, por ejemplo) podría toparse con este comportamiento y Me pregunto por qué falta la tabla que acaban de crear.
Quizás algunos manuales recomiendan no usar identificadores entre comillas, pero el hecho es que los identificadores entre comillas están disponibles para su uso y pueden usarse y, además, muchos paquetes hacen que sea una política usar siempre los identificadores entre comillas al crear y acceder a relaciones que no son completamente en minúsculas, p. ej., PGAdmin III.
Por ejemplo, este es el script generado por PGAdmin III al crear una tabla a través de la interfaz de usuario:
CREATE TABLE public."TBLUSER"
(
username text
)
WITH (
OIDS = FALSE
)
;
Por lo tanto, la única forma en que un usuario puede acceder a esta tabla en una consulta es por referencia a su identificador entre comillas, es decir, "TBLUSER"
. Intentar acceder a esta tabla en una consulta con un no-citado identificador resultará en el fracaso para localizar la relación, es decir, TBLUSER
.