2.4. Inserção de linhas na tabela #

O comando INSERT é usado para inserir linhas na tabela:

INSERT INTO clima
    VALUES ('Salvador - BA', 21, 28, 3.4, '2022-06-25');

Repare que todos os tipos de dados possuem formato de entrada de dados bastante óbvios. As constantes que não são valores numéricos simples, geralmente devem estar entre apóstrofos ('), como no exemplo acima. O tipo date é, na verdade, muito flexível em relação ao que aceita, mas para esse tutorial vamos nos fixar no formato sem ambiguidade mostrado acima. [7]

O tipo point requer um par de coordenadas como entrada, conforme mostrado abaixo:

INSERT INTO cidades
    VALUES ('Salvador - BA', '(-38.48806, -13.01477)');

A sintaxe usada até agora requer que seja lembrada a ordem das colunas. Uma sintaxe alternativa permite declarar as colunas explicitamente:

INSERT INTO clima (data, cidade, temp_min, temp_max, prcp)
    VALUES ('2022-06-26', 'Salvador - BA', 23, 27, 0);

Você pode listar as colunas em uma ordem diferente se desejar, ou até mesmo omitir algumas colunas, por exemplo, se a precipitação for desconhecida:

INSERT INTO clima (data, cidade, temp_min, temp_max)
    VALUES ('2022-06-29', 'Rio de Janeiro - RJ', 17, 29);

Muitos desenvolvedores consideram que declarar explicitamente as colunas é um estilo melhor que confiar na ordem implícita.

Por favor, entre todos os comandos mostrados acima para ter alguns dados para trabalhar nas próximas seções.

Também pode ser utilizado o comando COPY para carregar uma grande quantidade de dados a partir de arquivos de texto. Geralmente é mais rápido, porque o comando COPY é otimizado para essa finalidade, embora possua menos flexibilidade que o comando INSERT. Como exemplo poderíamos ter:

meu_bd=> COPY clima FROM '/home/user/clima.txt';

onde o arquivo contendo os dados deve estar disponível para a máquina servidora, e não para a estação cliente, porque o servidor lê o arquivo diretamente. Os dados inseridos acima na tabela meteorológica também poderiam ser inseridos a partir de um arquivo contendo (os valores são separados por um caractere de tabulação):

Salvador - BA	21	28	3.4	2022-06-25
Salvador - BA	23	27	0	 2022-06-26
Rio de Janeiro - RJ	17	 29	\N	 2022-06-29

Podem ser obtidas mais informações sobre este comando em COPY. [8]



[7] ISO 8601. (N. T.)

[8] DETALHE: Somente as funções de banco de dados (roles) com os privilégios da função de banco de dados "pg_read_server_files" podem executar o comando COPY para um arquivo; DICA: Qualquer um pode utilizar o comando COPY para a saída stdout ou para a entrada padrão. O comando \copy do psql funciona para qualquer usuário. (Ex: meu_bd=> \copy clima FROM '~/Trash/clima.txt'); (N. T.)