PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como inserir e excluir dados no PostgreSQL


Introdução


Adicionar e remover registros de tabelas são algumas das operações mais comuns que os bancos de dados realizam. Adicionar dados envolve especificar os nomes de tabela e coluna aos quais você deseja adicionar valores, bem como os valores que deseja inserir em cada campo. A exclusão de registros envolve identificar a linha ou linhas corretas e removê-las da tabela.

Neste guia, abordaremos como usar o SQL INSERT e DELETE comandos com PostgreSQL. Isso inclui a sintaxe básica, como retornar informações de dados sobre os dados que foram processados ​​e como adicionar ou remover várias linhas em uma única instrução.


Revisando a estrutura da tabela


Antes de usar o INSERT comando, você deve conhecer a estrutura da tabela para que possa acomodar os requisitos impostos pelas colunas, tipos de dados e restrições da tabela. Existem algumas maneiras diferentes de fazer isso dependendo do seu cliente de banco de dados.

Se você estiver usando o psql cliente de linha de comando, a maneira mais simples de encontrar essas informações é usar o \d+ comando meta embutido na ferramenta.

Por exemplo, para encontrar a estrutura de uma tabela chamada employee , você digitaria isso:
\d+ employee
                                                                Table "public.employee"   Column    | Type                        | Collation | Nullable | Default                                       | Storage  | Stats target | Description-------------+-----------------------------+-----------+----------+-----------------------------------------------+----------+--------------+------------- employee_id | integer                     |           | not null | nextval('employee_employee_id_seq'::regclass) | plain    |              | first_name  | character varying(45)       |           | not null |                                               | extended |              | last_name   | character varying(45)       |           | not null |                                               | extended |              | last_update | timestamp without time zone |           | not null | now()                                         | plain    |              |Indexes:    "employee_pkey" PRIMARY KEY, btree (employee_id)    "idx_employee_last_name" btree (last_name)Triggers:    last_updated BEFORE UPDATE ON employee FOR EACH ROW EXECUTE FUNCTION last_updated()Access method: heap

A saída exibe os nomes das colunas da tabela, tipos de dados e valores padrão, entre outros.

O \d+ O comando meta só está disponível com o psql cliente, portanto, se estiver usando um cliente diferente, talvez seja necessário consultar as informações da tabela diretamente. Você pode obter a maioria das informações relevantes com uma consulta como esta:
SELECT column_name, data_type, column_default, is_nullable, character_maximum_lengthFROM information_schema.columns WHERE table_name ='employee';
 column_name | data_type                   | column_default                                | is_nullable | character_maximum_length-------------+-----------------------------+-----------------------------------------------+-------------+-------------------------- employee_id | integer                     | nextval('employee_employee_id_seq'::regclass) | NO          | first_name  | character varying           |                                               | NO          | 45 last_name   | character varying           |                                               | NO          | 45 last_update | timestamp without time zone | now()                                         | NO          |(4 rows)

Eles devem dar uma boa ideia da estrutura da tabela para que você possa inserir valores corretamente.


Usando INSERT para adicionar novos registros às tabelas


O SQL INSERT O comando é usado para adicionar linhas de dados a uma tabela existente. Depois de conhecer a estrutura da tabela, você pode construir um comando que corresponda às colunas da tabela com os valores correspondentes que deseja inserir para o novo registro.

A sintaxe básica do comando se parece com isso:
INSERT INTO my_table(column1, column2)VALUES ('value1', 'value2');

As colunas na lista de colunas correspondem diretamente aos valores fornecidos na lista de valores.

Por padrão, o INSERT O comando retorna o ID do objeto (geralmente 0) e uma contagem de linhas que foram inseridas com sucesso:
INSERT 0 1

Por exemplo, para inserir um novo funcionário no campo employee tabela listada acima, poderíamos digitar:
INSERT INTO employee(first_name, last_name)VALUES ('Bob', 'Smith');
INSERT 0 1

Aqui, fornecemos valores para o first_name e last_name colunas, deixando as outras colunas para serem preenchidas por seus valores padrão. Se você consultar a tabela, verá que o novo registro foi adicionado:
SELECT * FROM employee;
 employee_id | first_name | last_name |        last_update-------------+------------+-----------+----------------------------           1 | Bob        | Smith     | 2020-08-19 21:07:00.952454(1 row)


Retornando dados de INSERT declarações


Se você quiser informações adicionais sobre os dados que foram adicionados à tabela, você pode incluir o RETURNING cláusula no final de sua declaração. O RETURNING A cláusula especifica as colunas a serem exibidas dos registros que acabaram de ser inseridos.

Por exemplo, para exibir todas as colunas dos registros que acabaram de ser inseridos, você pode digitar algo assim:
INSERT INTO my_table(column_name, column_name_2)VALUES ('value', 'value2')RETURNING *;
 column_name | column_name_2-------------+--------------- value       | value2(1 row)INSERT 0 1

Usando o employee tabela, ficaria algo assim:
INSERT INTO employee(first_name, last_name)VALUES ('Sue', 'Berns')RETURNING *;
 employee_id | first_name | last_name |       last_update-------------+------------+-----------+--------------------------           2 | Sue        | Berns     | 2020-08-19 21:15:01.7622(1 row)INSERT 0 1

Você também pode optar por retornar apenas colunas específicas de inserções. Por exemplo, aqui, estamos interessados ​​apenas no ID do novo funcionário:
INSERT INTO employee(first_name, last_name)VALUES ('Delores', 'Muniz')RETURNING employee_id;
 employee_id -------------           3(1 row)INSERT 0 1

Como de costume, você também pode usar aliases de coluna para alterar os nomes das colunas na saída:
INSERT INTO employee(first_name, last_name)VALUES ('Simone', 'Kohler')RETURNING employee_id AS "Employee ID";
 Employee ID-------------           4(1 row)INSERT 0 1


Usando INSERT para adicionar várias linhas de uma vez


Inserir registros uma instrução por vez é mais demorado e menos eficiente do que inserir várias linhas de uma vez. O PostgreSQL permite que você especifique várias linhas para adicionar à mesma tabela. Cada nova linha é encapsulada entre parênteses, com cada conjunto de parênteses separado por vírgulas.

A sintaxe básica para inserção de vários registros é assim:
INSERT INTO my_table(column_name, column_name_2)VALUES    ('value', 'value2'),    ('value3', 'value4'),    ('value5', 'value6');

Para o employee tabela que estamos referenciando, você pode adicionar quatro novos funcionários em uma única instrução digitando:
INSERT INTO employee(first_name, last_name)VALUES    ('Abigail', 'Spencer'),    ('Tamal', 'Wayne'),    ('Katie', 'Singh'),    ('Felipe', 'Espinosa');
INSERT 0 4


Usando DELETE para remover linhas de tabelas


O SQL DELETE O comando é usado para remover linhas de tabelas, funcionando como ação complementar a INSERT . Para remover linhas de uma tabela, você deve identificar as linhas que deseja segmentar fornecendo critérios de correspondência em um WHERE cláusula.

A sintaxe básica fica assim:
DELETE FROM my_tableWHERE <condition>;

Por exemplo, para cada linha em nosso employee tabela que tem seu first_name definido como Abigail , poderíamos digitar isso:
DELETE FROM employeeWHERE first_name = 'Abigail';
DELETE 1

O valor de retorno aqui indica que o DELETE comando foi processado com uma única linha sendo removida.


Retornando dados de DELETE declarações


Assim como o INSERT comando, você pode retornar as linhas afetadas ou colunas específicas das linhas excluídas adicionando um RETURNING cláusula:
DELETE FROM my_tableWHERE <condition>RETURNING *;

Por exemplo, podemos verificar se o registro correto foi removido retornando todas as colunas do employee excluído aqui:
DELETE FROM employeeWHERE last_name = 'Smith'RETURNING *;
 employee_id | first_name | last_name |        last_update-------------+------------+-----------+----------------------------           1 | Bob        | Smith     | 2020-08-19 21:07:00.952454(1 row)DELETE 1


Usando DELETE para remover várias linhas de uma vez


Você pode remover vários itens de uma vez com DELETE manipulando os critérios de seleção especificados no WHERE cláusula.

Por exemplo, para remover várias linhas por ID, você pode digitar algo assim:
DELETE FROM employeeWHERE employee_id in (3,4)RETURNING *;
 employee_id | first_name | last_name |        last_update         -------------+------------+-----------+----------------------------           3 | Delores    | Muniz     | 2020-08-19 21:17:06.943608           4 | Simone     | Kohler    | 2020-08-19 21:19:19.298833(2 rows)DELETE 2

Você pode até deixar de fora o WHERE cláusula para remover todas as linhas de uma determinada tabela:
DELETE FROM employeeRETURNING *;
 employee_id | first_name | last_name |        last_update-------------+------------+-----------+----------------------------           2 | Sue        | Berns     | 2020-08-19 21:15:01.7622           6 | Tamal      | Wayne     | 2020-08-19 22:11:53.408531           7 | Katie      | Singh     | 2020-08-19 22:11:53.408531           8 | Filipe     | Espinosa  | 2020-08-19 22:11:53.408531(4 rows)DELETE 4

Esteja ciente, no entanto, que usar DELETE esvaziar uma tabela de dados não é tão eficiente quanto o TRUNCATE comando, que pode remover dados sem varrer a tabela.


Conclusão


Neste artigo, apresentamos alguns dos comandos mais importantes para controlar quais dados estão em suas tabelas do PostgreSQL. O INSERT pode ser usado para adicionar novos dados às tabelas, enquanto o comando DELETE O comando especifica quais linhas devem ser removidas. Ambos os comandos são capazes de retornar as linhas que afetam e podem operar em várias linhas ao mesmo tempo.

Esses dois comandos são os principais mecanismos usados ​​para gerenciar o aumento ou diminuição do número de registros que sua tabela contém. Entender sua sintaxe básica, bem como as maneiras de combiná-las com outras cláusulas, permitirá que você preencha e limpe suas tabelas conforme necessário.