Eu notei um MATCH SIMPLE
e MATCH FULL
, mas não entendo o que eles fazem. Vejo que o padrão é MATCH SIMPLE
; mas, como as outras MATCH
cláusulas da FOREIGN KEY
restrição funcionam?
relate perguntas
-
Posso ativar o PITR depois que o banco de dados foi usado
-
Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo
-
Os procedimentos armazenados impedem a injeção de SQL?
-
Sequências Biológicas do UniProt no PostgreSQL
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
Confira a
CREATE TABLE
página do manual :Além disso, no capítulo sobre Chaves Estrangeiras :
E não deixe de consultar o manual atual ou a versão que corresponde à sua instalação. Não caia em links desatualizados do Google para versões desatualizadas.
FULL
vsSIMPLE
vsPARTIAL
Embora a resposta escolhida esteja correta, se isso for novo para você, você pode querer vê-lo com código - acho que é mais fácil grocar dessa maneira.
Logicamente, com
FULL
eSIMPLE
, podemos inserir uma correspondência completa.O problema surge quando uma das colunas é
NULL
.O insert into
t_full
gera o seguinte erro,Ok, então e
(42,NULL)
-- esta é a parte que eu sempre achei confusaMATCH SIMPLE
,O comportamento acima NÃO funcionaria com o unimplemented
MATCH PARTIAL
, que provavelmente faz o que você deseja para um índice composto em que a coluna mais à direita éNULL
eliminada. No entanto, algumas pessoas veem isso como um método de abrir a caixa de Pandora para um design ruim.Definições simples e mnemônicos
MATCH FULL
tudo deve corresponder totalmente ou todas as colunas devem serNULL
MATCH SIMPLE
se uma coisa éNULL
a restrição é simplesmente ignorada.MATCH PARTIAL
se uma coisa éNULL
o fato de que nem tudo éNULL
parcialmente recuperado fazendo algo sensato para o propósito da restrição.Notas de especificação SQL
Para a posteridade, aqui estão as definições do SQL Spec no
<match type>
Embora isso não seja específico do PostgreSQL, esses exemplos são demonstrados com o PostgreSQL