Ir para conteúdo
Fórum Script Brasil
  • 0

Algumas dúvidas básicas de PostgreSQL


Fabiano Vasconcelos

Pergunta

Considerem a seguinte situação: eu criei um BD chamado "escola" e uma tabela chamada "alunos". Na tabela "alunos", criei as seguintes colunas, nesta ordem: aluno (varchar), id_aluno (int) e data_nasc (date). Setei "aluno" como sendo NOT NULL e "id_aluno" como sendo NOT NULL e "auto increment" (serial).

Na hora de dar um "INSERT INTO alunos VALUE (etc, etc, etc);", obviamente não será preciso que seja inserido o campo "id_aluno", pois o próprio SGBD cuida disso pra mim. Acontece que eu não sabia como deveria proceder. Pra mim, o fato de digitar: "INSERT INTO alunos VALUE ('José dos Anzóis Furados', 26/09/2003)" já fazia com que o SGBD entendesse o que deveria ser feito. Porém, na hora de dar um "select * from" na tabela vi que o campo "data_nasc" estava vazio e o "id_aluno" estava "-2008"! Tudo bem, então, vamos consertar o prejuízo manualmente: dei um UPDATE e setei o campo "id_aluno" como deveria estar! Porém, ao tentar inserir outro aluno (somente com o nome do aluno e mais nada) o SGDB reclamou:

escola=# INSERT INTO alunos VALUES ('José Bibiano Trigueiro');

ERROR: duplicate key value violates unique constraint "alunos_pkey"

DETAIL: Key (id_aluno)=(1) already exists.

Diante disto eu pergunto:

1. Como "pular" o id_aluno na hora de inserir dados na tabela?

2. Como consertar esse erro para que ele volte a inserir os dados corretos na tabela, já que ele vai tentar inserir a chave inteira 1 sem sucesso sempre? Ou seja, se uma coluna é auto increment e mesmo assim for setado um valor para ela "na marra", na próxima iteração o SGDB vai querer usar o valor que foi setado na marra e ele vai reclamar. O que fazer?

3. Há ainda uma pergunta que não tem nada a ver com a situação acima: como inserir uma coluna "status" como sendo do tipo bit? Tentei fazê-lo com o comando "UPDATE alunos ADD COLUMN status bit;" e ele me retornou a seguinte mensagem:

ERROR: syntax error at or near "COLUMN"

LINE 1: UPDATE alunos ADD COLUMN status bit;

No caso da pergunta 1, alguém poderia dizer: "Ah! isso é fácil! É só digitar 'INSERT INTO alunos (aluno, data_nasc) VALUE (etc, etc, etc);'" Mas se a tabela tiver 50 colunas? Vou ter que digitar TODAS as colunas menos a que eu não quero, todas as vezes que eu for inserir algum dado na tabela? Ex: "INSERT INTO alunos (aluno, data_nasc, pai, mae, serie, turno, turma, professora, status, etc, etc, etc, etc, etc, etc, etc, etc...) VALUE (etc, etc, etc...);"

De já, agradeço a ajuda!

Grande abraço a todos!

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
1. Como "pular" o id_aluno na hora de inserir dados na tabela?

Tem que explicitar os campos que não tem valor default.

2. Como consertar esse erro para que ele volte a inserir os dados corretos na tabela, já que ele vai tentar inserir a chave inteira 1 sem sucesso sempre? Ou seja, se uma coluna é auto increment e mesmo assim for setado um valor para ela "na marra", na próxima iteração o SGDB vai querer usar o valor que foi setado na marra e ele vai reclamar. O que fazer?
truncate table alunos restart identity
3. Há ainda uma pergunta que não tem nada a ver com a situação acima: como inserir uma coluna "status" como sendo do tipo bit?
alter table alunos add column status boolean

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...