Executando esta solicitação:
update table t1 set t1.column = 0 where t1.column2 = 1234
Obtendo este erro:
a coluna "t1" da relação "tabela" não existe
Esta solicitação funciona bem no MySQL.
Por que recebo esse erro no PostgreSQL?
Executando esta solicitação:
update table t1 set t1.column = 0 where t1.column2 = 1234
Obtendo este erro:
a coluna "t1" da relação "tabela" não existe
Esta solicitação funciona bem no MySQL.
Por que recebo esse erro no PostgreSQL?
Não tenho certeza se essa é a sintaxe desejada ou não. Verifique sua sintaxe para
UPDATE
Atualmente, isso é
Portanto, se você fornecer
table t1
, ele será analisado como uma tabela chamadatable
. Na verdade, para fazer isso, você precisa colocá-lo entre aspas,"table" t1
o que você está fazendo ou sua biblioteca está fazendo.Vamos criar alguns dados de texto,
Agora podemos tentar sua consulta original e obter o resultado original,
E esse é o problema que você está recebendo. Assim como na tabela, se você for usar uma palavra-chave SQL, precisará colocá-la entre aspas. Curiosamente, isso não é suficiente aqui.
Além disso, parece que o aliasing de tabela não é suportado na lista SET , independentemente de a coluna ser uma palavra-chave reservada ou não.
Por que atualmente está funcionando como projetado
Por que você não pode usar aliases, xocolatl do IRC ajuda nisso,
Portanto, no código de
CREATE
uma tabela com um tipo composto personalizado, execute umUPDATE
nele.Portanto, a sintaxe que permite o
.
ismycol.type-address
, nottablealias.col-name
.Resolvendo o problema de sintaxe ambÃgua
Se isso não fizesse sentido, qualquer comportamento, exceto esse, daria a você uma sintaxe ambÃgua,
O que
mycol.x
se refere lá? Como não é ambÃguo , a referência de tabela e o aliasing de tabela estão desativados, portanto, é definitivamente 100% do tempo um tipo composto chamadomycol
, na tabelamytable
.É uma estranheza do Postgres. Conforme declarado na documentação do
UPDATE
, nomes de tabela não devem ser usados ​​para colunas de destino.Apenas uma tabela pode ser atualizada em uma
UPDATE
cláusula, portanto não há espaço para má interpretação da instrução.Enquanto atualiza a consulta: Se você usar o Allis com o nome da tabela, em Definir dados, não precisará fornecer referência ao Allis assim