Postgres中的外键问题

时间:2014-02-10 17:46:43

标签: sql postgresql foreign-keys key

我遇到了一些不好的FK麻烦我......

我有这个GIANT表:

CREATE TABLE conhecimento
(
  grupo integer NOT NULL,
  empresa integer NOT NULL,
  filial integer NOT NULL,
  unidade integer NOT NULL,
  diferenciadornumero integer NOT NULL,
  serie integer NOT NULL,
  numero integer NOT NULL,
  dtemissao timestamp without time zone,
  dtinc date,
  dtalt date,
  dtprevisaoentrega timestamp without time zone,
  dtcancelamento date,
  dtexecucao date,
  codigousuario integer,
  semaforo integer DEFAULT 0,
  veiculo character varying(7),
  cnpjcpfcodigoveiculo character varying(20),
  motorista character varying(20),
  naturezaoperacao integer,
  pagadorfrete integer DEFAULT 1,
  remetente character varying(20),
  destinatario character varying(20),
  consignatario character varying(20),
  redespacho character varying(20),
  paiscoleta character varying(3),
  ufcoleta character varying(3),
  cidadecoleta character varying(65),
  paisentrega character varying(3),
  ufentrega character varying(3),
  cidadeentrega character varying(65),
  valortotalprestacao numeric(15,2) DEFAULT 0,
  faturado integer DEFAULT 2,
  filialdestino integer,
  unidadedestino integer,
  numerocontroleformulario integer,
  carreta1 character varying(7),
  carreta2 character varying(7),
  carreta3 character varying(7),
  utilizartabela integer DEFAULT 99,
  tipoconfiguracaotabela integer DEFAULT 1,
  complementotipotabela character varying(20),
  modelotabela integer DEFAULT 99,
  filialtabela integer,
  unidadetabela integer,
  codigotabela integer,
  versaotabela integer,
  sequenciatabela integer,
  paisorigemtabela character varying(3),
  uforigemtabela character varying(3),
  cidadeorigemtabela character varying(65),
  regiaoorigemtabela character varying(3),
  paisdestinotabela character varying(3),
  ufdestinotabela character varying(3),
  cidadedestinotabela character varying(65),
  regiaodestinotabela character varying(3),
  condicaoespecialtabela character varying(3),
  tarifatabela integer,
  calcularpesoquantidade integer DEFAULT 99,
  quantidade numeric(12,2) DEFAULT 0,
  pesobruto numeric(11,3) DEFAULT 0,
  pesoimpureza numeric(11,3) DEFAULT 0,
  peso numeric(11,3) DEFAULT 0,
  pesocubado numeric(11,3) DEFAULT 0,
  valortotalmercadoria numeric(15,2) DEFAULT 0,
  valortaxadespacho numeric(15,2) DEFAULT 0,
  valortaxaseccat numeric(15,2) DEFAULT 0,
  valortaxaademe numeric(15,2) DEFAULT 0,
  valortaxagris numeric(15,2) DEFAULT 0,
  valortaxaseguro numeric(15,2) DEFAULT 0,
  valortaxaentrega numeric(15,2) DEFAULT 0,
  valortaxadescarga numeric(15,2) DEFAULT 0,
  valortaxareembolso numeric(15,2) DEFAULT 0,
  valortaxapedagio numeric(15,2) DEFAULT 0,
  valortotaltaxas numeric(15,2) DEFAULT 0,
  valorfretepeso numeric(15,2) DEFAULT 0,
  tarifapercvalorfrete numeric(15,6) DEFAULT 0,
  valorfretemercadoria numeric(15,2) DEFAULT 0,
  valordesconto numeric(15,2) DEFAULT 0,
  valorliquido numeric(15,2) DEFAULT 0,
  segurorcfdc integer,
  percsegurorcfdc numeric(8,4) DEFAULT 0,
  valorsegurorcfdc numeric(15,2) DEFAULT 0,
  percsegurorctrc numeric(8,4) DEFAULT 0,
  valorsegurorctrc numeric(15,2) DEFAULT 0,
  valortotalseguro numeric(15,2) DEFAULT 0,
  valormercadoriasegurocomplementar numeric(15,2) DEFAULT 0,
  valorbasecalculoicms numeric(15,2) DEFAULT 0,
  percaliquotaicms numeric(6,2) DEFAULT 0,
  valoricms numeric(15,2) DEFAULT 0,
  valoricmssubstituicaotributaria numeric(15,2) DEFAULT 0,
  valoricmsisento numeric(15,2) DEFAULT 0,
  valoricmsoutros numeric(15,2) DEFAULT 0,
  complementar integer DEFAULT 2,
  valorbasecalculoiss numeric(15,2) DEFAULT 0,
  percaliquotaiss numeric(6,2) DEFAULT 0,
  valoriss numeric(15,2) DEFAULT 0,
  cargaexpressa integer DEFAULT 2,
  prazopadraoentrega integer,
  adicionalentrega integer DEFAULT 2,
  reentrega integer DEFAULT 2,
  filialctrcorigem integer,
  unidadectrcorigem integer,
  diferenciadornumeroctrcorigem integer,
  seriectrcorigem integer,
  numeroctrcorigem integer,
  observacaopadrao character varying,
  observacaoicms character varying,
  observacaodigitada character varying,
  condicaopagamento integer,
  alterarparcelasmanualmente integer DEFAULT 2,
  lotacao integer DEFAULT 2,
  tipodocumento integer DEFAULT 6,
  valoradicionalcargaexpressa numeric(15,2) DEFAULT 0,
  valorpedagiodestacado numeric(15,2) DEFAULT 0,
  quantidadeentregas numeric(3,0) DEFAULT 0,
  valoradicionaladvalorem numeric(15,2) DEFAULT 0,
  tipoicms integer,
  classificacaoicms integer,
  perctaxaadministracao numeric(6,2),
  valortaxaadministracao numeric(15,2),
  pedagiocompoebasecalculo integer,
  digitaritensnotafiscal integer NOT NULL DEFAULT 2,
  alterarcontabilizacaomanualmente integer NOT NULL DEFAULT 2,
  usuariomarkmanifesto integer,
  freteredespacho integer NOT NULL DEFAULT 1,
  utilizarpesobruto integer NOT NULL DEFAULT 2,
  quantidadeetiquetas integer,
  faturaremissao integer NOT NULL DEFAULT 3,
  bancocedente integer,
  agenciacedente character varying(7),
  contacedente character varying(15),
  codigocedente character varying(17),
  modalidadecobranca character varying(3),
  filialcarteira integer,
  unidadecarteira integer,
  dtagendamentoentrega timestamp without time zone,
  icmsfrete integer NOT NULL DEFAULT 1, -- 1 - Incluso...
  quantidadereferenciacalculo numeric(12,2) DEFAULT 0,
  parametroorigemtabela integer DEFAULT 1,
  filialorigemtabela integer,
  unidadeorigemtabela integer,
  parametrodestinotabela integer DEFAULT 1,
  filialdestinotabela integer,
  unidadedestinotabela integer,
  utilizartabelaafretamento integer NOT NULL DEFAULT 2,
  valorfretefreteiro numeric(15,6) DEFAULT 0,
  valorpedagiofreteiro numeric(15,2) DEFAULT 0,
  dtexportacaocliente date,
  m3 numeric(8,5) DEFAULT 0,
  valorcontabil numeric(15,2) DEFAULT 0,
  tipoprazoentrega integer NOT NULL DEFAULT 1,
  devolucao integer NOT NULL DEFAULT 2,
  tipofrete integer,
  numeropasta character varying(20),
  numerodtadi character varying(20),
  tipocarga integer,
  estabelecimentoorigem integer,
  estabelecimentodestino integer,
  percbasecalculoicms numeric(5,2) DEFAULT 0,
  embutiricmspedagio integer NOT NULL DEFAULT 2,
  cnpjcpfcodigopagadorfrete character varying(20),
  alteradoimpostosmanualmente integer NOT NULL DEFAULT 2,
  naturezamercadoria character varying(40),
  especiemercadoria character varying(40),
  tipofreteinformadomanualmente integer NOT NULL DEFAULT 2, -- 1 - Sim, 2 - Não
  cortesia integer NOT NULL DEFAULT 2,
  alteradosegurosmanualmente integer NOT NULL DEFAULT 2,
  usuarioemissor integer,
  grupoconhecimentoaereo integer,
  empresaconhecimentoaereo integer,
  filialconhecimentoaereo integer,
  unidadeconhecimentoaereo integer,
  cnpjcpfcodigoemissorconhecimentoaereo character varying(20),
  diferenciadornumeroconhecimentoaereo integer,
  serieconhecimentoaereo integer,
  numeroconhecimentoaereo integer,
  percsegurorctac numeric(8,4) DEFAULT 0,
  valorsegurorctac numeric(15,2) DEFAULT 0,
  dtentrega timestamp without time zone,
  informarnaturezamercadoria integer NOT NULL DEFAULT 1,
  informarespeciemercadoria integer NOT NULL DEFAULT 1,
  quantidadecalculofrete numeric(12,2) DEFAULT 0,
  utilizarquantidadecalculofrete integer NOT NULL DEFAULT 2,
  remetenteinscricaoestadualdiferenciada integer NOT NULL DEFAULT 2,
  destinatarioinscricaoestadualdiferenciada integer NOT NULL DEFAULT 2,
  consignatarioinscricaoestadualdiferenciada integer NOT NULL DEFAULT 2,
  redespachoinscricaoestadualdiferenciada integer NOT NULL DEFAULT 2,
  liberarimpressaodocumentodigitacaonotafiscal integer NOT NULL DEFAULT 1,
  informadoredespacho integer NOT NULL DEFAULT 1, -- 1 - Manualmente, 2 - Sugerido (agente)
  tipoinclusao integer NOT NULL DEFAULT 1, -- , 1 - Manual, 2 - Automatica EDI, 3 - Manual ACT, 4 - Manual Programacao carregamento, 5 - Automatica EDI - Frete informado, 6 - Automatica - vinculado a CTRC
  complementarimposto integer NOT NULL DEFAULT 2, -- 1 - Sim...
  observacaolivrofiscal character varying(200),
  tipocargainformadomanualmente integer NOT NULL DEFAULT 2, -- 1 - Sim...
  tiponumerodtadi integer NOT NULL DEFAULT 1, -- 1 - DTA...
  despachante character varying(100),
  estufagem integer NOT NULL DEFAULT 2, -- 1 - Sim, 2 - Não
  tamanhocontainer integer NOT NULL DEFAULT 3, -- 1 - 20...
  filialconfiguracaoespecificaimpressao integer,
  unidadeconfiguracaoespecificaimpressao integer,
  percbasecalculoicmssubstituicaotributaria numeric(6,2) DEFAULT 0,
  valorbasecalculoicmssubstituicaotributaria numeric(15,2) DEFAULT 0,
  percaliquotaicmssubstituicaotributaria numeric(6,2) DEFAULT 0,
  valorbasecalculoicmscreditopresumido numeric(15,2) DEFAULT 0,
  percaliquotaicmscreditopresumido numeric(6,2) DEFAULT 0,
  valoricmscreditopresumido numeric(15,2) DEFAULT 0,
  valoricmssubstituicaotributariaobservacaoicms numeric(15,2) DEFAULT 0,
  paisorigemcalculoimposto character varying(3),
  uforigemcalculoimposto character varying(3),
  cidadeorigemcalculoimposto character varying(65),
  alteradoorigemcalculoimpostomanualmente integer NOT NULL DEFAULT 2, -- 1 - Sim...
  paisdestinocalculoimposto character varying(3),
  ufdestinocalculoimposto character varying(3),
  cidadedestinocalculoimposto character varying(65),
  alteradodestinocalculoimpostomanualmente integer NOT NULL DEFAULT 2, -- 1 - Sim...
  pagadorfreteemissao integer NOT NULL DEFAULT 1, -- 1 - Remetente...
  refaturado integer NOT NULL DEFAULT 2, -- 1 - Sim...
  alterarcomissoesmanualmente integer NOT NULL DEFAULT 2, -- 1 - Sim...
  mercadoriadestinadaexportacao integer NOT NULL DEFAULT 2, -- 1 - Sim...
  mercadoriadestinadaexportacaoinformadomanualmente integer NOT NULL DEFAULT 2, -- 1 - Sim...
  usuariomarkrateio integer,
  rota character varying(3),
  pesoliquido numeric(11,3) DEFAULT 0,
  utilizarpesoliquido integer NOT NULL DEFAULT 2, -- 1 - Sim...
  ajustarvalorfrete integer NOT NULL DEFAULT 2, -- 1 - Sim...
  valorbasecalculopisretido numeric(15,2) DEFAULT 0,
  percaliquotapisretido numeric(5,2) DEFAULT 0,
  valorpisretido numeric(15,2) DEFAULT 0,
  valorbasecalculocofinsretido numeric(15,2) DEFAULT 0,
  percaliquotacofinsretido numeric(5,2) DEFAULT 0,
  valorcofinsretido numeric(15,2) DEFAULT 0,
  valorbasecalculocsllretido numeric(15,2) DEFAULT 0,
  percaliquotacsllretido numeric(5,2) DEFAULT 0,
  valorcsllretido numeric(15,2) DEFAULT 0,
  valorbasecalculoirretido numeric(15,2) DEFAULT 0,
  percaliquotairretido numeric(5,2) DEFAULT 0,
  valorirretido numeric(15,2) DEFAULT 0,
  valortotalmercadoriacalculofrete numeric(15,2) DEFAULT 0,
  utilizarvalormercadoriacalculofrete integer NOT NULL DEFAULT 2, -- 1 - Sim...
  comboio integer NOT NULL DEFAULT 2, -- 1 - Sim...
  containervazio integer NOT NULL DEFAULT 2, -- 1 - Sim...
  tipocontainer integer,
  containers character varying(100),
  quantidadepallets integer DEFAULT 0,
  usuariomarkprotocolo integer,
  emissaoeletronica integer NOT NULL DEFAULT 2, -- 1 - Sim...
  ufemissorcte character varying(2),
  numerolotecte bigint,
  ambienteemissaocte integer, -- 1 - Producao...
  contingenciacte integer DEFAULT 2, -- 1 - Sim, 2 - Não
  situacaocte integer NOT NULL DEFAULT 5, -- 1 - aguardandoprocessamento...
  chaveacessocte character varying(44),
  numeroprotocolocte bigint,
  dacteimpressa integer, -- 1 - Sim...
  numeroprotocolocancelamentocte bigint,
  empresalocadoveiculo integer,
  filiallocadoveiculo integer,
  unidadelocadoveiculo integer,
  tipo integer NOT NULL DEFAULT 1, -- 1 - Remetente, 2 - Destinatario, 3 - Consignatario, 4 - Redespacho, 5 - Endereço de Entrega, 6 - Expedidor, 7 - recebedor
  tiposervico integer NOT NULL DEFAULT 1, -- 1 - Normal...
  clienteretiradestino integer NOT NULL DEFAULT 2, -- 1 - Sim...
  icmsdiferido integer NOT NULL DEFAULT 2, -- 1 - Sim...
  segurofrete integer NOT NULL DEFAULT 1, -- 1 - Incluso...
  percsegurofrete numeric(8,4) DEFAULT 0,
  atividadeveiculo character varying(5),
  lotacaoemissaoeletronica integer NOT NULL DEFAULT 2, -- 1 - Sim...
  codigoprojetoapisul integer,
  limitecreditobloqueado integer NOT NULL DEFAULT 2, -- 1 - Sim...
  valorfreteformulaa numeric(15,2) DEFAULT 0,
  valorfreteformulab numeric(15,2) DEFAULT 0,
  valorfreteformulac numeric(15,2) DEFAULT 0,
  valorfreteformulad numeric(15,2) DEFAULT 0,
  embutiricmsvalorfreteformulaa integer NOT NULL DEFAULT 1, -- 1 - Sim...
  embutiricmsvalorfreteformulab integer NOT NULL DEFAULT 1, -- 1 - Sim...
  embutiricmsvalorfreteformulac integer NOT NULL DEFAULT 1, -- 1 - Sim...
  embutiricmsvalorfreteformulad integer NOT NULL DEFAULT 1, -- 1 - Sim...
  utilizarnsu integer NOT NULL DEFAULT 2, -- 1 - Sim...
  expedidor character varying(20),
  recebedor character varying(20),
  cnpjcpfcodigotomadorservico character varying(20),
  tomadorservico integer DEFAULT 1, -- 1 - Remetente...
  expedidorinscricaoestadualdiferenciada integer DEFAULT 2, -- 1 - Sim...
  recebedorinscricaoestadualdiferenciada integer DEFAULT 2, -- 1 - Sim...
  bairroorigemtabela character varying(60),
  bairrodestinotabela character varying(60),
  bairrocoleta character varying(60),
  bairroentrega character varying(60),
  valorfreteorigem numeric(15,2) DEFAULT 0,
  valortotalmercadoriaefeitoseguro numeric(15,2) DEFAULT 0,
  paisdesembaracoaduaneiro character varying(3),
  ufdesembaracoaduaneiro character varying(3),
  cidadedesembaracoaduaneiro character varying(65),
  dtiniciodescarga timestamp without time zone,
  cnpjcpfcodigonotafiscalentradaanulacao character varying(20),
  dtemissaonotafiscalentradaanulacao date,
  serienotafiscalentradaanulacao integer,
  numeronotafiscalentradaanulacao integer,
  temperaturaminima numeric(3,1),
  temperaturamaxima numeric(3,1),
  valorbasepis numeric(15,2) DEFAULT 0,
  percaliquotapis numeric(5,2) DEFAULT 0,
  valorpis numeric(15,2) DEFAULT 0,
  valorbasecofins numeric(15,2) DEFAULT 0,
  percaliquotacofins numeric(5,2) DEFAULT 0,
  valorcofins numeric(15,2) DEFAULT 0,
  latitudecoleta numeric(17,14) DEFAULT 0,
  longitudecoleta numeric(17,14) DEFAULT 0,
  latitudeentrega numeric(17,14) DEFAULT 0,
  longitudeentrega numeric(17,14) DEFAULT 0,
  quantidadeetiquetasidentificacaovolume integer NOT NULL DEFAULT 0,
  usuariomarkroteirocarregamento integer,
  situacaotributariapis character varying(3) DEFAULT '001'::character varying, -- Utilizar o cadastro de csts do pis
  situacaotributariacofins character varying(3) DEFAULT '001'::character varying, -- Utilizar o cadastro de csts do cofins
  reduzidocreditovenda integer,
  sequenciacontingencia integer,
  modalidadecontingencia integer, -- NULO - NÃO É CONTINGÊNCIA,1 - FS-DA, 2 - SVC
  dadosadicionaiscte character varying(36),
  usuariolotecte integer, -- Usuario que gerou o lote do CTe
  situacaotributariaicms character varying(3),
  valorbasecalculoaproveitamentocreditoicms numeric(15,2) DEFAULT 0,
  percaliquotaaproveitamentocreditoicms numeric(6,2) DEFAULT 0,
  valoraproveitamentocreditoicms numeric(15,2) DEFAULT 0,
  responsavelseguro integer, -- 1 - Remetente;, 2 - Expedidor;, 3 - Recebedor;, 4 - Destinatário;, 5 - Emitente do CT-e;, 6 - Tomador de Serviço
  teste integer,
  opcaofiscalemitente integer, -- 1 - Optante simples, 2 - Optante pelo credito presumido do ICMS, 3 - Nao optante por credito presumido do ICMS (Debito/credito), 4 - Outro
  pesobalanca numeric(11,3) DEFAULT 0,
  CONSTRAINT pk_con_g_e_f_u_difnum_ser_num PRIMARY KEY (grupo , empresa , filial , unidade , diferenciadornumero , serie , numero ),
  CONSTRAINT ri_fk_con_car1 FOREIGN KEY (carreta1)
      REFERENCES veiculo (placa) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_car2 FOREIGN KEY (carreta2)
      REFERENCES veiculo (placa) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_car3 FOREIGN KEY (carreta3)
      REFERENCES veiculo (placa) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_cnpcpfcodpagfre FOREIGN KEY (cnpjcpfcodigopagadorfrete)
      REFERENCES cadastro (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_cnpcpfcodtomser FOREIGN KEY (cnpjcpfcodigotomadorservico)
      REFERENCES cadastro (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_cnpcpfcodvei FOREIGN KEY (cnpjcpfcodigoveiculo)
      REFERENCES cadastro (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_con FOREIGN KEY (consignatario)
      REFERENCES cadastro (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_des FOREIGN KEY (destinatario)
      REFERENCES cadastro (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_docelelote FOREIGN KEY (grupo, empresa, ufemissorcte, tipodocumento, numerolotecte)
      REFERENCES documentoeletronicolote (grupo, empresa, uf, tipodocumento, numerolote) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_exp FOREIGN KEY (expedidor)
      REFERENCES cadastro (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_banced_ageced_conced_codced_modcob FOREIGN KEY (grupo, empresa, bancocedente, agenciacedente, contacedente, codigocedente, modalidadecobranca)
      REFERENCES banco_conta_cedente (grupo, empresa, banco, agencia, conta, codigocedente, modalidadecobranca) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_conpag FOREIGN KEY (grupo, empresa, condicaopagamento)
      REFERENCES condicaopagamento (grupo, empresa, codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_f_tipdoc_seqcon FOREIGN KEY (grupo, empresa, filial, tipodocumento, sequenciacontingencia)
      REFERENCES documentoeletronicocontingencia (grupo, empresa, filial, tipodocumento, sequencia) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_f_u FOREIGN KEY (grupo, empresa, filial, unidade)
      REFERENCES unidade (grupo, empresa, filial, codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_filconespimp_uniconespimp FOREIGN KEY (grupo, empresa, filialconfiguracaoespecificaimpressao, unidadeconfiguracaoespecificaimpressao)
      REFERENCES unidade (grupo, empresa, filial, codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_fildes_unides_rot FOREIGN KEY (grupo, empresa, filialdestino, unidadedestino, rota)
      REFERENCES rota (grupo, empresa, filial, unidade, codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_redcreven FOREIGN KEY (grupo, empresa, reduzidocreditovenda)
      REFERENCES planoconta_habilitado (grupo, empresa, reduzido) MATCH SIMPLE
      ON UPDATE RESTRICT ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_segrcf FOREIGN KEY (grupo, empresa, segurorcfdc)
      REFERENCES segurorcfdc (grupo, empresa, codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_ser FOREIGN KEY (grupo, empresa, serie)
      REFERENCES serie (grupo, empresa, codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_tipcar FOREIGN KEY (grupo, empresa, tipocarga)
      REFERENCES tipocarga (grupo, empresa, codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_tipcon FOREIGN KEY (grupo, empresa, tipocontainer)
      REFERENCES tipocontainer (grupo, empresa, codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_g_e_tipfre FOREIGN KEY (grupo, empresa, tipofrete)
      REFERENCES tipofrete (grupo, empresa, codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_mot FOREIGN KEY (motorista)
      REFERENCES cadastro (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_natope FOREIGN KEY (naturezaoperacao)
      REFERENCES naturezaoperacao (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_paicol_ufcol_cidcol FOREIGN KEY (paiscoleta, ufcoleta, cidadecoleta)
      REFERENCES cidade (pais, uf, nome) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_paidesadu_ufdesadu_ciddesadu FOREIGN KEY (paisdesembaracoaduaneiro, ufdesembaracoaduaneiro, cidadedesembaracoaduaneiro)
      REFERENCES cidade (pais, uf, nome) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_paidescalimp_ufdescalimp_ciddescalimp FOREIGN KEY (paisdestinocalculoimposto, ufdestinocalculoimposto, cidadedestinocalculoimposto)
      REFERENCES cidade (pais, uf, nome) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_paidestab_ufdestab FOREIGN KEY (paisdestinotabela, ufdestinotabela)
      REFERENCES estado (pais, sigla) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_paidestab_ufdestab_ciddestab FOREIGN KEY (paisdestinotabela, ufdestinotabela, cidadedestinotabela)
      REFERENCES cidade (pais, uf, nome) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_paient_ufent_cident FOREIGN KEY (paisentrega, ufentrega, cidadeentrega)
      REFERENCES cidade (pais, uf, nome) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_paioricalimp_uforicalimp_cidoricalimp FOREIGN KEY (paisorigemcalculoimposto, uforigemcalculoimposto, cidadeorigemcalculoimposto)
      REFERENCES cidade (pais, uf, nome) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_paioritab_uforitab FOREIGN KEY (paisorigemtabela, uforigemtabela)
      REFERENCES estado (pais, sigla) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_paioritab_uforitab_cidoritab FOREIGN KEY (paisorigemtabela, uforigemtabela, cidadeorigemtabela)
      REFERENCES cidade (pais, uf, nome) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_rec FOREIGN KEY (recebedor)
      REFERENCES cadastro (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_red FOREIGN KEY (redespacho)
      REFERENCES cadastro (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_rem FOREIGN KEY (remetente)
      REFERENCES cadastro (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_tipdoc FOREIGN KEY (tipodocumento)
      REFERENCES tipodocumento (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_usulotecte FOREIGN KEY (usuariolotecte)
      REFERENCES usuario (codigo) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ri_fk_con_vei FOREIGN KEY (veiculo)
      REFERENCES veiculo (placa) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT uk_con_g_e_f_u_difnum_ser_numconfor UNIQUE (grupo , empresa , filial , unidade , diferenciadornumero , serie , numerocontroleformulario )
)
WITH (
  OIDS=TRUE
);

Uff ..好吧,在那个巨大的桌子之后,创建并且有很多行,我正在尝试创建另一个表:

CREATE TABLE conhecimento_condicaoespecial_aviso
(
  grupo integer NOT NULL,
  empresa integer NOT NULL,
  filial integer NOT NULL,
  unidade integer NOT NULL,
  diferenciadornumero integer NOT NULL,
  serie integer NOT NULL,
  numero integer NOT NULL,
  sequencia integer NOT NULL,
  tipodocumento integer NOT NULL,
  aviso integer NOT NULL,
  dtinc timestamp without time zone,
  codigousuario integer,
  acao integer NOT NULL DEFAULT 1, -- 1 - Bloquear, 2 - Liberar
  origem integer NOT NULL DEFAULT 1, -- 1 - Tela, 2 - EDI, 3 - XML
  complemento character varying,
  corrigido integer NOT NULL DEFAULT 2, -- 1 - Sim, 2 -Nã
  CONSTRAINT pk_conceav_g_e_f_u_difnum_ser_num_seq_tipdoc_avi PRIMARY KEY (grupo , empresa , filial , unidade , diferenciadornumero , serie , numero , sequencia , tipodocumento , aviso ),
  CONSTRAINT ri_fk_conceav_g_e_f_u_difnum_ser_num FOREIGN KEY (grupo, empresa, filial, unidade, diferenciadornumero, serie, numero)
      REFERENCES conhecimento (grupo, empresa, filial, unidade, diferenciadornumero, serie, numero) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
  OIDS=FALSE
);
ALTER TABLE conhecimento_condicaoespecial_aviso
  OWNER TO postgres;
COMMENT ON COLUMN conhecimento_condicaoespecial_aviso.acao IS '1 - Bloquear, 2 - Liberar';
COMMENT ON COLUMN conhecimento_condicaoespecial_aviso.origem IS '1 - Tela, 2 - EDI, 3 - XML';
COMMENT ON COLUMN conhecimento_condicaoespecial_aviso.corrigido IS '1 - Sim, 2 -Nã';

-- Index: fk_conceav_g_e_f_u_difnum_ser_num

-- DROP INDEX fk_conceav_g_e_f_u_difnum_ser_num;

CREATE INDEX fk_conceav_g_e_f_u_difnum_ser_num
  ON conhecimento_condicaoespecial_aviso
  USING btree
  (grupo , empresa , filial , unidade , diferenciadornumero , serie , numero );

-- Trigger: RI_ConstraintTrigger_604902640 on conhecimento_condicaoespecial_aviso

-- DROP TRIGGER "RI_ConstraintTrigger_604902640" ON conhecimento_condicaoespecial_aviso;

CREATE CONSTRAINT TRIGGER "RI_ConstraintTrigger_604902640"
  AFTER INSERT
  ON conhecimento_condicaoespecial_aviso
  FOR EACH ROW
  EXECUTE PROCEDURE "RI_FKey_check_ins"();

-- Trigger: RI_ConstraintTrigger_604902808 on conhecimento_condicaoespecial_aviso

-- DROP TRIGGER "RI_ConstraintTrigger_604902808" ON conhecimento_condicaoespecial_aviso;

CREATE CONSTRAINT TRIGGER "RI_ConstraintTrigger_604902808"
  AFTER UPDATE
  ON conhecimento_condicaoespecial_aviso
  FOR EACH ROW
  EXECUTE PROCEDURE "RI_FKey_check_upd"();

而且,好吧,当我尝试创建第二个表时,返回此错误,

  

注意:ALTER TABLE / ADD PRIMARY KEY将创建隐式索引   表的“pk_conceav_g_e_f_u_difnum_ser_num_seq_tipdoc_avi”   “conhecimento_condicaoespecial_aviso”语境:SQL语句“ALTER   表conhecimento_condicaoespecial_aviso ADD CONSTRAINT   pk_conceav_g_e_f_u_difnum_ser_num_seq_tipdoc_avi PRIMARY KEY   (GRUPO,Empresa与,孝,unidade,diferenciadornumero,系列,NUMERO,sequencia,tipodocumento,说Aviso)”   PL / pgSQL函数“_fnc_tmp_conversao_2013010218043442_302”第75行   SQL语句错误:没有给定唯一约束匹配   引用表“conhecimento”的键语境:SQL语句   “ALTER TABLE conhecimento_condicaoespecial_aviso ADD CONSTRAINT   ri_fk_conceav_g_e_f_u_difnum_ser_num外键   (GRUPO,Empresa与,孝,unidade,diferenciadornumero,系列,NUMERO)   参考文献conhecimento   (grupo,empresa,filial,unidade,diferenciadornumero,serie,numero)ON   更新CASCADE ON DELETE CASCADE“PL / pgSQL函数   SQL语句中的“_fnc_tmp_conversao_2013010218043442_302”第78行

     

*** 错误 ** *

     

错误:没有与给定键匹配的唯一约束   引用表“conhecimento”SQL状态:42830 Contexto:SQL   声明“ALTER TABLE conhecimento_condicaoespecial_aviso ADD   CONSTRAINT ri_fk_conceav_g_e_f_u_difnum_ser_num FOREIGN KEY   (GRUPO,Empresa与,孝,unidade,diferenciadornumero,系列,NUMERO)   参考文献conhecimento   (grupo,empresa,filial,unidade,diferenciadornumero,serie,numero)ON   更新CASCADE ON DELETE CASCADE“PL / pgSQL函数   SQL语句中的“_fnc_tmp_conversao_2013010218043442_302”第78行

我已经检查了第一个表中的重复记录,并寻找重复的列名,但是,我没有发现任何错误..

1 个答案:

答案 0 :(得分:2)

PostgreSQL认为表“conhecimento”中的列集{grupo,empresa,filial,unidade,diferenciadornumero,serie,numero}没有UNIQUE约束。

乍一看,PostgreSQL似乎是正确的,因为它通常是。 (PostgreSQL有很好的错误信息。)你有两种选择。

  • 在“conhecimento”表格中对{grupo,empresa,filial,unidade,diferenciadornumero,serie,numero}创建一个UNIQUE约束。
  • 创建对其他内容的外键引用 - 对其具有UNIQUE约束。

后来。 。

虽然发布的代码似乎不会导致此错误消息,但OP仍然说这是正确的答案。