
Warning: Pg_query(): Query Failed: Error: Duplicate Key Violates Uniqu
#1
Posted 11/12/2006, 08:13
Aqui na empresa temos uma intranet, mas não fui eu quem fez e também sou novato nessa área de PHP, ainda estou aprendendo, deu um erro aqui de repente e ninguém mais consegue cadastrar, segue o erro:
Warning: pg_query(): Query failed: ERROR: duplicate key violates unique constraint "pk_oscpd_codigo" in cadastro_oscpd.php on line 55
Desculpe mas houve um erro ao tentar cadastrar.
Eu agradeço quem puder me ajudar, valeu!
Leandro
Usuário: PHP - Postgre - MySQL
Aprendendo: PHP - Postgre - MySQL
Usuário Experiente:
Softwares - Dreamweaver - Photoshop - Corel Draw - Flash (básico)
Ferramentas - Google AdWords - Yahoo! Search Marketing
#2
Posted 11/12/2006, 08:23
verifique se o campo código na tabela não é auto incremento, pois se for, não é necessário específicar um valor para ele quando for adicionar um registro, caso não seja, vc terá que pegar o maior código e somar 1, tipo, se o ultimo foi 49, o registro atual terá que ser 50,
qualquer dúvida, poste o script que tá dando o erro!!!
flw
Como ressucitar seu windows(Registro Corrompido)
Dactyli Informática
Grid Master-Detail em php
Projeto C#.NET
#3
Posted 11/12/2006, 09:07
$numero = pg_query ("SELECT * FROM os_cpd WHERE maquina='$maquina' AND cod_dep='$departamento' AND criacao=to_date('$data','DD/MM/YYYY') AND horac='$hora' LIMIT 1");
Segue o script inteiro da página onde está acontecendo o erro (cadastro_oscpd.php):
<?php include_once ("./include/config.php"); include_once ("./include/functions.php"); $nome = $_REQUEST['nome']; $email = $_REQUEST['email']; $departamento = $_REQUEST['dpto']; $tipo = $_REQUEST['tipo']; $local = $_REQUEST['local']; $find_local = pg_query ("SELECT * FROM localizacao WHERE codigo='$local'"); $result = pg_fetch_array($find_local); $ativo = $result['ativo']; $cod_local = $result['codigo']; unset ($result); pg_free_result($find_local); $descricao = addslashes(nl2br($_REQUEST['descricao'])); if (empty ($departamento) || (empty ($local) && $local != "Localização")){ echo " <script language=\"JavaScript\"> alert (\"Os campos Local e Departamento devem ser preenchidos\"); history.go(-1); </script> "; exit; } $position = validacao_mail_os ($email,$restringe_email,$validos_email); if (!$position){ echo " <script language=\"JavaScript\"> alert (\"Desculpe mas o e-mail digitado não é um e-mail valido!\"); history.go(-2); </script> "; exit; } $ip = $_SERVER['REMOTE_ADDR']; $maquina = gethostbyaddr($ip); $data = date("d/m/Y"); $hora = date("H:i"); if (isset($nome) || isset($email) || isset($departamento) || isset($local) || isset($descricao)){ if (onde_envia($ativo,$tipo)){ if(pg_query("INSERT INTO os_cpd (\"nome\", \"ip\", \"maquina\", \"cod_dep\", \"cod_local\", \"descricao\", \"criacao\", \"horac\", \"email\",\"estado\",\"dono\") VALUES ('$nome','$ip','$maquina','$departamento','$cod_local','$descricao',to_date('$data','DD/MM/YYYY'),'$hora', '$email','pendente','00000')")){ $numero = pg_query ("SELECT * FROM os_cpd WHERE maquina='$maquina' AND cod_dep='$departamento' AND criacao=to_date('$data','DD/MM/YYYY') AND horac='$hora' LIMIT 1"); $codigo = pg_fetch_array($numero); echo "<div id=\"restrito\">\n <dl><dt id=\"top\"> </dt>\n <dd id=\"normal\">\n<br /> <p id=\"centro\"><b>$nome sua Ordem de Serviço foi cadastrada com sucesso.<br /></b>\n <br />Com o seguinte código ".$codigo['codigo']."</p>\n </dd>\n </dl>\n </div>\n "; $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; $headers .= "From: Intranet<intranet@empresa.com.br>\r\n"; $body = "<font size=2 face=verdana color=#000000<b>$nome</b> Ordem de Serviço foi cadastrada com sucesso.<br>"; $body .= "Com o seguinte código ".$codigo['codigo']."<br>"; $body .= "Para para visualizar sua os <a href=\"http://$server/index.php?conteudo=YnVzY2Ffb3M=&n_os=".$codigo['codigo']."\">Clique Aqui</a>"; mail($email,"OS cadastrada",$body,$headers); pg_free_result($numero); } else{ echo "<p id=\"centro\">Desculpe mas houve um erro ao tentar cadastrar.</p>"; } } else { if(pg_query("INSERT INTO os_cpd (\"nome\", \"ip\", \"maquina\", \"cod_dep\", \"cod_local\", \"descricao\", \"criacao\", \"horac\", \"email\",\"estado\",\"dono\") VALUES ('$nome','$ip','$maquina','$departamento','$cod_local','$descricao',to_date('$data','DD/MM/YYYY'),'$hora', '$email','llevon','00000')")){ $numero = pg_query ("SELECT * FROM os_cpd WHERE maquina='$maquina' AND cod_dep='$departamento' AND criacao=to_date('$data','DD/MM/YYYY') AND horac='$hora' LIMIT 1"); $codigo = pg_fetch_array($numero); echo "<div id=\"restrito\">\n <dl><dt id=\"top\"> </dt>\n <dd id=\"normal\">\n<br /> <p id=\"centro\"><b>$nome sua Ordem de Serviço foi enviada com sucesso a empresa. Sendo o CPD isento da manutenção desta máquina<br /></b>\n <br />Para controle do CPD temos um cópia de sua OS através do código ".$codigo['codigo']."</p>\n </dd>\n </dl>\n </div>\n "; $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; $headers .= "From: $email<$email>\r\n"; $body = "<font size=2 face=verdana color=#000000<b>$nome</b> Ordem de Serviço foi cadastrada com sucesso.<br>"; $body .= "Com o seguinte código ".$codigo['codigo']."<br>"; $body .= "Para para visualizar sua os <a href=\"http://$server/index.php?conteudo=YnVzY2Ffb3M=&n_os=".$codigo['codigo']."\">Clique Aqui</a>"; mail($email,"OS cadastrada",$body,$headers); $nome_local = pg_query ("SELECT nome,codigo FROM localizacao WHERE codigo='$local' LIMIT 1"); $texto = "<p><font size=2 face=verdana color=#00000>\n"; $texto .= "<b>Localização:</b> ".pg_result($nome_local,0)." <br>"; $texto .= "<b>Data:</b> $dia/$mes/$ano <br>"; $texto .= "<b>Hora: </b>".date("H:i")." <br>"; $texto .= "<b>E-mail: </b>".$email." <br>"; $texto .= "<b>Descrição:</b> <br>"; $texto .= $descricao; $texto .= "</font></p>\n"; mail($emailterceiros,"Chamado EMPRESA local ".pg_result($nome_local,0),$texto,$headers); } else{ echo "<p id=\"centro\">Desculpe mas houve um erro ao tentar cadastrar.</p>"; } } } else{ echo " <script language=\"JavaScript\"> alert (\"Todos campos devem ser preeenchidos corretamente\"); history.go(-1); </script> "; } ?>
Usuário: PHP - Postgre - MySQL
Aprendendo: PHP - Postgre - MySQL
Usuário Experiente:
Softwares - Dreamweaver - Photoshop - Corel Draw - Flash (básico)
Ferramentas - Google AdWords - Yahoo! Search Marketing
#4
Posted 11/12/2006, 11:25
talvez seja algum problema no banco..
dê uma olhada


Como ressucitar seu windows(Registro Corrompido)
Dactyli Informática
Grid Master-Detail em php
Projeto C#.NET
#5
Posted 11/12/2006, 12:22

Valeu,
Leandro
Usuário: PHP - Postgre - MySQL
Aprendendo: PHP - Postgre - MySQL
Usuário Experiente:
Softwares - Dreamweaver - Photoshop - Corel Draw - Flash (básico)
Ferramentas - Google AdWords - Yahoo! Search Marketing
#6
Posted 11/12/2006, 12:54
Mero mortal!
#7
Posted 11/12/2006, 13:40
Quantidade de registros da tabela os_cpd: 998 (eu dei um count na tabela no SQL)
Último código cadastrado: 01034
Quando eu vou cadastrar na OS, ele cadastra com o número 96496, ai depois deste não é possível cadastrar mais nenhuma OS, então eu alterei os dados do campo Padrão de "lpad((nextval('seq_cpd'::regclass))::text, 5, (0)::text)" para "lpad((nextval('seq_cpd'::regclass))::text, 7, (0)::text)" ...
Ai voltou a cadastrar normalmente, só que com o número gigantesco de 9649640, 9649641.. e por ai vai.
Leandro
Usuário: PHP - Postgre - MySQL
Aprendendo: PHP - Postgre - MySQL
Usuário Experiente:
Softwares - Dreamweaver - Photoshop - Corel Draw - Flash (básico)
Ferramentas - Google AdWords - Yahoo! Search Marketing
#8
Posted 11/12/2006, 14:41
Mero mortal!
#9
Posted 11/12/2006, 15:05
Segue como está configurada em "Sequências":
Nome: seq_cpd
Último valor: 9649678
Incrementar por: 1
Valor máximo: 9223372036854775807
Valor mínimo: 1
Valor de Cache: 1
Contador do log: 30
Foi dado um ciclo? Não
Foi chamado? Sim
Leandro
Usuário: PHP - Postgre - MySQL
Aprendendo: PHP - Postgre - MySQL
Usuário Experiente:
Softwares - Dreamweaver - Photoshop - Corel Draw - Flash (básico)
Ferramentas - Google AdWords - Yahoo! Search Marketing
#10
Posted 11/12/2006, 16:41
drop sequence seq_cpd;
create sequence seq_cpd increment 1 start numero no cycle;
numero = valor o qual você deseja reiniciar sua contagem, último valor a ser incluido na tabela.
ps.: caso tenha dúvidas, obtenha mais informações na documentação.
http://www.postgresq...tesequence.html
Mero mortal!
#11
Posted 12/12/2006, 08:14

Realmente o problema estava na sequência (seq_cpd), digitei o seguinte comando SQL:
ALTER SEQUENCE seq_cpd RESTART WITH NUMERO;
Aí começou a rodar a partir do último código cadastrado.
O comando que você enviou é similar a esse, obrigado por responder e enviar a documentação do postgre.
Usuário: PHP - Postgre - MySQL
Aprendendo: PHP - Postgre - MySQL
Usuário Experiente:
Softwares - Dreamweaver - Photoshop - Corel Draw - Flash (básico)
Ferramentas - Google AdWords - Yahoo! Search Marketing
#12
Posted 12/12/2006, 09:14

Bom saber que também existe um ALTER SEQUENCE.
Mero mortal!
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)