erro ao fazer check no postgree

22/10/2012

0

Fala galera, estou com um erro primario, burrice mesmo

estou tentando fazer esta check no postgree:


ALTER TABLE feriado ADD CONSTRAINT verificar_feriado(((nome),(data),(id_pais))<( 2));


isso seria para fazer que um registro não seja duplicado, essa forma e semelhante a que eu fazia no sql server, mas me retorna este erro:

Erro de SQL:

ERRO: erro de sintaxe em ou próximo a "("



LINE 1: ...TER TABLE feriado ADD CONSTRAINT verificar_feriado(((nome),(...
^
No bloco:
ALTER TABLE feriado ADD CONSTRAINT verificar_feriado(((nome),(data),(id_pais))<( 2))


alguém pode me dar uma ajuda ai com postgree, help me
Wisley Souza

Wisley Souza

Responder

Posts

22/10/2012

Tiago

Boa tarde Wisley,
Olhando o seu código não encontrei a palavra reservada "CHECK".

acredito que ficaria assim:

ALTER TABLE feriado ADD CONSTRAINT verificar_feriado CHECK (((nome),(data),(id_pais))<( 2))
Responder

22/10/2012

Wisley Souza

Fala cara, vlw por responder, mas mesmo fazendpo da forma que vc sugeriu acontece este erro:

Erro de SQL:

ERRO: operador não existe: record < integer
HINT: Nenhum operador corresponde com o nome e o(s) tipo(s) de argumento(s) informados. Você precisa adicionar conversões de tipo explícitas.
No bloco:
ALTER TABLE feriado ADD CONSTRAINT verificar_feriado CHECK (((nome),(data),(id_pais))<( 2))
Responder

22/10/2012

Wisley Souza

nothing???
Responder

22/10/2012

Wisley Souza

nome é do tipo character varying(255)
data é do tipo date
id_pais e do tipo bigint
Responder

22/10/2012

Wisley Souza

o objetivo da minha check e fazer que não haja um registro duplicado, que não contenha estas informações repetidas, mesmo id de pais+mesmo nome+mesma data, no sql server era bem parecido, porem ai no postgree não funciona, como eu faria uma check para alcançar este objetivo?
Responder

22/10/2012

Tiago

Opa Wisley, você tem o script funcionando no SQL SERVER? Se tiver fica mais fácil para analisarmos, mas eu acho que a lógica é por ai.
Responder

23/10/2012

Jair N.

Bom Dia, entre opções, você pode ter uma "chave candidata"
veja chave...
ALTER TABLE feriado ADD CONSTRAINT verificar_feriado UNIQUE (nome, data, id_pais);
Veja index....
CREATE UNIQUE INDEX verifica_feriado ON feriado USING hash (nome, data, id_pais);




o objetivo da minha check e fazer que não haja um registro duplicado, que não contenha estas informações repetidas, mesmo id de pais+mesmo nome+mesma data, no sql server era bem parecido, porem ai no postgree não funciona, como eu faria uma check para alcançar este objetivo?
Responder

23/10/2012

Wisley Souza

não gostaria de trabalhar com índice se possível...


quanto ao colega de cima que pediu pra mim he mostrar como faço no sql server, faço da seguinte maneira:

1 - seleciono a tabela feriado
2 - vou em restrições, geral, expressão
3 - digito o comando ([dbo].[chk_feriado]([NOME],[DATA],[ID_PAIS])<(2))


pronto funciona, não deixa ter a repetição, prestando atenção em postgre ele entende que eu não posso colocar o valor menor que 2 na coluna e dar erro por ser do tipo varchar...
Responder

23/10/2012

Tiago

Wisley tenta converter para inteiro. acho que pode dar certo, afinal nós não podemos comparar um inteiro com um varchar,ambos são de tipos distintos.
Responder

23/10/2012

Wisley Souza

mas a minha logica e não deixar repetir o registro não impedir que seja colocado números menores que dois, entende?

se eu converter ele vai simplesmente impedir que seja inserido valor inteiro menos que 2, eu acho rsrs
Responder

26/10/2012

Diego Araújo

Boa tarde Wisley,
eu não entendi exatamente o que você quer fazer mas a sintaxe exata para criação de check é essa:

create TB_departamento(
id int primary key,
data int not null,
codigo int not null);

ALTER TABLE "TB_departamento" ADD CONSTRAINT verificar_numero1 CHECK (id<2);
ALTER TABLE "TB_departamento" ADD CONSTRAINT verificar_numero2 CHECK (date<2);
ALTER TABLE "TB_departamento" ADD CONSTRAINT verificar_numero3 CHECK (codigo<2);

Espero ter ajudado.
Responder

26/10/2012

Wisley Souza

O que quero fazer é que uma linha que contenha pedro,01/01/2012, Brasil

não se repita, não tenha outra linha com estes mesmos dados, ai vc pode me dizer, aaaa mas pq vc não usa índice único com esse conjunto de dados, por alguns motivos,...
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar