2011-06-13 14 views
20

Pregunta simple, ¿hay alguna manera de omitir la comilla doble en PostgreSQL?Omitiendo la comilla doble para hacer la consulta en PostgreSQL

Aquí hay un ejemplo, dando select * from A;, recuperaré ERROR: relation "a" does not exist, y tendría que dar select * from "A"; para obtener el resultado real.

¿Hay alguna manera de no hacer el segundo y en su lugar hacer lo primero en PostgreSQL? Se requieren

Respuesta

36

Su problema con esta consulta comenzó cuando creó su tabla. Cuando crees tu tabla, no uses comillas.

Utilice esta:

CREATE TABLE a (...); 

No es esto:

CREATE TABLE "A" (...); 

Este último lo hará de modo que siempre hay que citar más tarde. El primero hace un nombre normal y se puede utilizar SELECT * FROM a; o SELECT * FROM A;

Si no se puede simplemente volver a crear la tabla, utilice la sintaxis ALTER TABLE:

ALTER TABLE "A" RENAME TO a; 
+3

Utilizo el asistente de creación de tablas, y cada vez que escribo con mayúscula, se agrega automáticamente la doble cita – zfm

+2

Nunca he usado el asistente de creación de tablas, pero me imagino que hay una opción en el software para no hacer eso. No es una práctica muy común citar nombres de tablas en postgres. Simplemente hace tu vida más difícil. –

+1

cuando dije "asistente", es lo que se da en 'pgAdmin III' – zfm

11

comillas si incluye letras mayúsculas en el nombre de la tabla en Postgres

para evitar los requisitos de nombre a su mesa "a"

+0

nice answer ... ¿Hay alguna razón por la que PostgreSQL hace eso (nos obliga a poner dobles comillas para una tabla de mayúsculas)? – zfm

+2

Sí, la razón es "el estándar ANSI lo dice". – PhilHibbs

7

PostgreSQL tiene algunos particular behaviour en lo que se refiere a la cotización y el caso sentivity: se pliega cada identificador no citado en minúsculas (también en el momento de la creación) y luego trabaja con mayúsculas y minúsculas.

Las comillas dobles en los identificadores sólo son necesarios cuando se definió el nombre de tabla (o campo de nombre o lo que sea) (en el momento de creación del esquema):

  • con letras mayúsculas (algunos o todos)
  • con citas

en ese caso (que consejos en contra), debe hacer lo siguiente cuando se hace referencia a él en una consulta:

  • entre mayúsculas y minúsculas (tipo de letra mayúscula/minúsculas exactamente como se define)
  • utilización cita

En otro caso, puede utilizar los identificadores no cotizadas (excepto si los necesitan, por supuesto) y el trabajo siempre insensible a mayúsculas y minúsculas.

+0

"... y trabajar en modo no sensible a mayúsculas/minúsculas". ¿Cómo hacer esto exactamente? – zfm

+0

@zfm: como dice Steve. Usted crea sus identificadores con letras minúsculas (o sin comillas, es lo mismo), y luego puede usarlos en modo insensible a mayúsculas y minúsculas (sin citarlos). – leonbloy

+0

lo siento malinterpreto su oración. Pensé que hay una opción para cambiar ese modo: D – zfm

0

Por favor ver la descripción detallada de lo que está sucediendo here .

Los nombres de la tabla del servidor PostgreSQL distinguen entre mayúsculas y minúsculas, pero forzados a minúsculas por defecto: cuando escribe CREATE TABLE AAA, se convertirá en CREATE TABLE aaa antes de la ejecución de la consulta.

nombres entre comillas dobles mantienen su caso, ya que era, así que después de CREATE TABLE "AaA" se obtiene la tabla AaA y tienen que escribirlo doble cita una y otra vez.

no tienen idea de por qué lo hacen :)

2

No utilice letra mayúscula en su nombre de tabla o columna de su nombre, si está utilizando tal cosa entonces los Postgres requerida doble cotización para acceder a él .

Cuestiones relacionadas