Nesta resposta do SO: PostgreSQL: nomes de restrições padrão
Parece que minha chave estrangeira (não nomeada no momento da criação da tabela) deveria ter assumido o sufixo _fkey
... Mas parece que, _foreign
em vez disso, assumido o sufixo. Isso é normal?
Estou preocupado em criar uma migração onde eu assumo o nome da restrição e ela funciona no meu ambiente e depois falha em todos os outros lugares...
Existe uma maneira de garantir que eu referencie a restrição corretamente em qualquer ambiente?
Atualizado com informações:
versão posgres: 16.4
cliente que criou a chave: knex
O comando FK completo usado:
table.foreign('userId').references('users.id')
psql com \d:
Sinto muito, mas não tenho permissão para postar código da nossa base de código, então aqui está com as redações:
Indexes:
"***_pkey" PRIMARY KEY, btree (id)
"***" UNIQUE CONSTRAINT, btree ("***Id", "***Id")
Foreign-key constraints:
"***_***id_foreign" FOREIGN KEY ("***Id") REFERENCES ***(id)
"***_userid_foreign" FOREIGN KEY ("userId") REFERENCES users(id) <=== the column of interest
https://knexjs.org/guide/schema-builder.html#foreign mostra a sintaxe:
Isso parece mostrar um método opcional
withKeyName()
que você pode usar para especificar o nome da restrição.Não sou usuário do knex, então não vou testar isso. Experimente!
Editar: Se você não especificar o nome da restrição, o knex escolhe um, e pode não ser o mesmo que o padrão do próprio PostgreSQL. Ou seja, o framework knex especifica um nome de restrição, seja ele especificado por você ou não.
Você notou que a documentação afirma isto: