Em 11-02-2013 10:42, Fabiano Listas escreveu:
Em 10-02-2013 20:43, Osvaldo Kussama escreveu:
Em 10/02/13, Fabiano Listas<[email protected]> escreveu:
Bom dia, colegas!
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?
INSERT INTO alunos VALUE ('José dos Anzóis Furados', DEFAULT,
'26/09/2003');
Boa!!!
ou especificar a lista dos campos sendo inseridos:
INSERT INTO alunos(aluno, data_nasc ) VALUE ('José dos Anzóis
Furados', '26/09/2003');
Dessa eu não gostei. Se a lista de campos for longa eu me lasco!
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?
Veja a função setval:
http://www.postgresql.org/docs/current/interactive/functions-sequence.html
Vou ler assim que eu clicar em "Enviar". :)
Li, mas não ficou claro, apesar de eu ter lido várias vezes com bastante
atenção. Eles dizem como a função funciona, mas não cita exemplos. A
explicação está muito abstrata, fora de contexto. Vou procurar na NET
outras explicações para o mesmo tema. Achei também isso
http://pgdocptbr.sourceforge.net/pg80/sql-altersequence.html , mas ainda
não li. Vou ler e digo se se encaixa no meu problema.
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;
Para adicionar uma nova coluna em sua tabela utilize ALTER TABLE:
http://www.postgresql.org/docs/current/interactive/sql-altertable.html
E é? Será que eu me confundi? Perai que eu vou tentar!
Tinha mesmo me confundido. É com alter table mesmo, heheheheh...
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
ADD [ COLUMN ] column_name data_type [ COLLATE collation ] [
column_constraint [ ... ] ]
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...);"
Como dito acima utilize o valor DEFAULT, caso a coluna possua uma
cláusula default.
Gostei de DEFAULT!
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Obrigado pela ajuda, Osvaldo!
Bom feriado!
--
*Fabiano Vasconcelos*
Graduando em Análise de Sistemas em Redes de Computadores
_Fortaleza, CE_
*www.jent.com.br*
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral