Eu emito o seguinte DDL:
CREATE TABLE foo
(
loopa INTEGER,
loop INTEGER
);
Em seguida, examinando o DDL no servidor (usando uma ferramenta do lado do cliente como DbVisualizer - desculpe, não conheço a consulta para produzi-lo diretamente), vejo o seguinte:
CREATE TABLE
foo
(
loopa INTEGER,
LOOP INTEGER
);
Observe a mudança de maiúsculas e minúsculas para a coluna nomeada, loop
mas não para a nomeada loopa
. Olhando para a lista de palavras- chave SQL loop
não parece ser uma palavra-chave. Por que então essa mudança seletiva?
Isso parece estar relacionado a um problema que estou tendo com um gatilho tentando acessar uma coluna loop
em uma tabela onde recebo:
Exception in thread "main" org.postgresql.util.PSQLException: ERROR: record "new" has no field "loop"
(onde recebo o mesmo erro independentemente de o código na função do gatilho acessar o campo como NEW.LOOP
ou NEW.loop
)
ATUALIZAR
As maiúsculas parecem ser um artefato do DbVisualizer. psql
mostra:
psql (9.1.13)
Type "help" for help.
foo-test=> \dS+ foo
Table "test.foo"
Column | Type | Modifiers | Storage | Description
--------+---------+-----------+---------+-------------
loopa | integer | | plain |
loop | integer | | plain |
Has OIDs: no
No entanto, isso ainda não explica por que o mecanismo PostgreSQL aparentemente não permite que meu gatilho acesse arquivos NEW.loop
. Quando renomeio a coluna (e o código do gatilho) para loopi
tudo parece funcionar bem. Portanto, provavelmente há algo mais profundo em ação aqui do que apenas uma falha do DbVisualizer. Vou tentar criar um SSCCE mais tarde.
ATUALIZAÇÃO 2
Um SSCCE para o problema do acionador foi criado aqui .
A palavra LOOP é uma palavra reservada em PL/pgSQL. Se você quiser usá-lo como um nome de coluna, precisará citá-lo.