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". :)
>
>
>> 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!
>
> 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.
>
>
> Osvaldo
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Obrigado pela ajuda, Osvaldo!
Bom feriado!
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral