2011-08-31 11 views
12

que crea una tabla Abc en el esquema público de mi base de datos PostgreSQL. De acuerdo con la documentación public debe ser el esquema predeterminado. search_path se establece en "$user",public como se esperaba. Pero la siguiente falla:PostgreSQL: tabla Nombre/esquema de confusión

select * from Abc 

y esto también llamada falla:

select * from public.Abc 

Ambos producen un error diciendo que relation ... does not exist. Pero este funciona bien:

select * from public."Abc" 

Soy un experimentado desarrollador de T-SQL, pero nuevo en postgresql. De acuerdo con la documentación, debería ser posible usar SQL "normal" con postgresql. Pero no funciona en mi caso. ¿Alguna pista de lo que podría haber arruinado?

Respuesta

9

defecto Postgresql a minúsculas mientras que ser entre mayúsculas y minúsculas con la columna/nombres de tabla:

select * from public.Abc 

es en realidad:.

select * from public.abc 

Esto se debe a su mesa se llama Abc, por lo que no se puede encontrar

Puede anular este comportamiento minúsculas a través de las comillas, por lo que "abc" se maneja como el ABC.

+3

Una buena regla de oro que lo vivo en el mundo en PG es el uso de relieve en lugar de camello caso de que se puede hacer en Microsoft SQL Server. Entonces haz fast_table en lugar de "FastTable". Encuentro citas extra como mínimo para ser molesto. Aunque otros pueden encontrar que los subrayados son los mismos. Pero vengo de Oracle y antecedentes, así que estoy acostumbrado. – Kuberchaun

5

No confíe en mayúsculas y minúsculas. Lo mejor para su cordura es nunca usar una caja mixta. El esquema público es (principalmente) el esquema predeterminado, y se puede omitir.

+0

La razón de este consejo es que se ejecuta rápidamente en problemas cuando el modelo se exporta a otra instalación, con otros ajustes para el caso (in) sensibilidad. – wildplasser

6

Esto es normal, nombres de objetos como tablas y columnas son sensibles a mayúsculas, a menos que se los pone entre comillas dobles". Este es un comportamiento estándar SQL.

+0

Solo por completitud. ¿Tengo razón en que el estándar SQL requiere que los nombres sin comillas funcionen igual que ** equivalente en mayúscula **? En otras palabras, 'Abc ≡" ABC "'? –

+2

@Grzegorz: Que yo sepa, se supone que los nombres de tablas y columnas a ser normalizado a mayúsculas a menos citado; PostgreSQL, OTOH, convierte los nombres a minúsculas en su lugar. –

Cuestiones relacionadas