O PostgreSQL, assim como cada banco, tem suas particularidades. O conceito de criação de tabelas é basicamente o mesmo de banco pra banco, mas às vezes a sintaxe muda. Nesse artigo vou mostrar um pequeno exemplo prático de como criar duas tabelas, onde uma referencia a outra por meio de uma chave estrangeira (foreign key). Se você está procurando uma documentação mais completa, pode encontrar aqui e aqui. E vamos ao exemplo:
A primeira tabela a ser criada é uma tabela de estados. Ela possui uma chave primária (ds_sigla_estado):
CREATE TABLE tb_estado ( ds_sigla_estado char(2) NOT NULL, ds_nome_estado character varying(100) NOT NULL, CONSTRAINT tb_estado_pkey PRIMARY KEY (ds_sigla_estado) )
A segunda tabela é tb_município, que possui uma chave primária (id_municipio) e faz referência (chave estrangeira) ao campo ds_sigla_estado em tb_estado.
CREATE TABLE tb_municipio ( id_municipio serial NOT NULL, ds_municipio character varying(100) NOT NULL, ds_sigla_estado char(2) NOT NULL references tb_estado(ds_sigla_estado), CONSTRAINT tb_municipio_pkey PRIMARY KEY (id_municipio) )
Entendeu? Se não, utilize os comentários e tire suas dúvidas ou então leia mais sobre o assunto aqui e aqui.
novembro 2nd, 2013 on 19:35
Boa noite Tiago.
Estou com uma dúvida, como estou usando o postgresql não consigo utilizar em um insert, os outros campos da chave estrangeira.
Exemplo:
Tenho a tabela secao e a tabela subsecao.
Sendo que na tabela secao eu tenho as colunas (sec_codigo, sec_nome, sec_sigla, subsec_codigo)
onde a coluna subsec_codigo é a minha chave estrangeira.
E na tabela subsecao tenho as colunas (subsec_codigo, subsec_nome).
Se eu fizer a minha inserção da seguinte maneira:
INSERT INTO secao(sec_nome, sec_sigla, subsec_codigo)
VALUES (‘Recursos Humanos’, ‘RH’, 1); Fica perfeito, porém para o que eu preciso não ajuda, pois eu teria que saber o código da subseção para poder prencher de forma correta na interface criada para o usuário.
Existe alguma maneira de eu preencher com o subsec_nome?, pois já fiz tal teste substituindo o subsec_codigo do exemplo acima e me retorna a mensagem que (PESSOAL),que seria minha subseção numero 1, não é um numero inteiro!
novembro 16th, 2013 on 12:22
Se eu entendi a sua dúvida, talvez remover a obrigatoriedade do campo subsec_codigo na tabela secao resolva seu problema.
novembro 18th, 2015 on 09:08
Muito bom seu trabalho, parabéns, continue assim, vlw 🙂
dezembro 18th, 2016 on 23:29
Muito útil este artigo. Obrigado pelo seu trabalho! Valeu mesmo!
fevereiro 26th, 2018 on 11:23
me ajudou demais, valeu amigo
outubro 26th, 2021 on 17:33
Obrigado pela dicas.