erro ao fazer check no postgree
Fala galera, estou com um erro primario, burrice mesmo
estou tentando fazer esta check no postgree:
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
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
Curtidas 0
Respostas
Tiago
22/10/2012
Boa tarde Wisley,
Olhando o seu código não encontrei a palavra reservada "CHECK".
acredito que ficaria assim:
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))
GOSTEI 0
Wisley Souza
22/10/2012
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))
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))
GOSTEI 0
Wisley Souza
22/10/2012
nothing???
GOSTEI 0
Wisley Souza
22/10/2012
nome é do tipo character varying(255)
data é do tipo date
id_pais e do tipo bigint
data é do tipo date
id_pais e do tipo bigint
GOSTEI 0
Wisley Souza
22/10/2012
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?
GOSTEI 0
Tiago
22/10/2012
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.
GOSTEI 0
Jair N.
22/10/2012
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);
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?
GOSTEI 0
Wisley Souza
22/10/2012
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...
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...
GOSTEI 0
Tiago
22/10/2012
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.
GOSTEI 0
Wisley Souza
22/10/2012
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
se eu converter ele vai simplesmente impedir que seja inserido valor inteiro menos que 2, eu acho rsrs
GOSTEI 0
Diego Araújo
22/10/2012
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.
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.
GOSTEI 0
Wisley Souza
22/10/2012
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,...
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,...
GOSTEI 0