Preamble
PostgreSQL INSERT statement is used to insert one or more records into a table in PostgreSQL.
The syntax for the INSERT statement
The syntax for PostgreSQL INSERT statement when inserting a record(s) using VALUES keyword
INSERT INTO table
(column1, column2,... )
VALUES
(expression1 | DEFAULT, expression2 | DEFAULT,... ),
(expression1 | DEFAULT, expression2 | DEFAULT,... ),
…;
Or:
The syntax for INSERT statement when inserting a single record using the DEFAULT VALUES keyword in PostgreSQL
INSERT INTO table
(column1, column2,... )
DEFAULT VALUES;
Or:
The syntax for INSERT statement when inserting multiple records using a subquery in PostgreSQL
INSERT INTO table
(column1, column2,... )
SELECT expression1, expression2,...
FROM source_table
[WHERE conditions];
Parameters and arguments of the statement
- table – A table for inserting records.
- column1, column2 – Columns in the table for inserting values.
- expression1 | DEFAULT, expression2 | DEFAULT – Used in the first syntax. These values are assigned to the columns in the table. If expression1 is specified then column1 will be assigned the value expression1, column2 will be assigned the value expression2, and so on. If DEFAULT is specified then the corresponding column will be filled with the default value.
- DEFAULT VALUES – Used in the second syntax. All columns will be filled with their default values.
- source_table – To be used in the third syntax. This is the source table when inserting data from another table.
- WHERE conditions – Optional. Used in the third syntax. These are the conditions that must be met to insert the records.
Note:
- When inserting records into a table using PostgreSQL, the INSERT operator must specify the value for each column NOT NULL.
- You can omit a column in PostgreSQL operator INSERT if the column allows NULL values.
Example using VALUES keyword
The easiest way to create a PostgreSQL INSERT query to get a list of values using the VALUES keyword.
For example:
INSERT INTO contacts
(contact_id, last_name, first_name, country)
VALUES
(250, 'Abramova', 'Irina', DEFAULT);
This PostgreSQL statement INSERT will cause a single record to be inserted into the contacts table. This new record will have contact_id 250, last_name ‘Abramova’, first_name ‘Irina’, and any default value for the country field.
You can use the above syntax to insert more than one record at a time.
For example:
INSERT INTO contacts
(contact_id, last_name, first_name, country)
VALUES
(250, 'Abramova', 'Irina', DEFAULT),
(251, 'Arbatova', 'Vitalina', 'Russia');
This PostgreSQL operator INSERT will insert two records into the contacts table. The first record will have contact_id 250, last_name ‘Abramova’, first_name ‘Irina’ and any default value for the country field . The second entry will have contact_id 251, last_name ‘Arbatova’, first_name ‘Vitalina’ and country ‘Russia’.
This will be equivalent to the next two INSERT operators:
INSERT INTO contacts
(contact_id, last_name, first_name, country)
VALUES
(250, 'Abramova', 'Irina', DEFAULT);
INSERT INTO contacts
(contact_id, last_name, first_name, country)
VALUES
(251, 'Arbatova', 'Vitalina', 'Russia');
Example using the DEFAULT VALUES keyword
In PostgreSQL, you can also insert a record into a table using DEFAULT VALUES syntax.
For example:
INSERT INTO contacts
(contact_id, last_name, first_name, country)
DEFAULT VALUES;
This PostgreSQL statement INSERT will cause one record to be inserted into the contacts table. This new record will be created with default values for the fields contact_id, last_name, first_name, and country.
Example using a subquery
You can also create more complex PostgreSQL statements INSERT using subqueries.
For example:
INSERT INTO contacts
(last_name, first_name)
SELECT last_name, first_name
FROM customers
WHERE customer_id > 3500;
By placing the SELECT operator in the INSERT operator, you can quickly perform several insertion operations.
With this type of insertion, you can check the number of lines to be inserted. You can define the number of rows to be inserted by executing the next PostgreSQL SELECT operator before inserting it.
SELECT count(*)
FROM customers
WHERE customer_id > 3500;
PostgreSQL: Insert Into | Course
About Enteros
Enteros offers a patented database performance management SaaS platform. It proactively identifies root causes of complex business-impacting database scalability and performance issues across a growing number of clouds, RDBMS, NoSQL, and machine learning database platforms.
The views expressed on this blog are those of the author and do not necessarily reflect the opinions of Enteros Inc. This blog may contain links to the content of third-party sites. By providing such links, Enteros Inc. does not adopt, guarantee, approve, or endorse the information, views, or products available on such sites.
Are you interested in writing for Enteros’ Blog? Please send us a pitch!
RELATED POSTS
How to Optimize Travel and Hospitality Operations with Enteros Database Software, AI-Powered Analytics, and Database Observability
- 19 August 2026
- Database Performance Management
Introduction Hotels, airlines, resorts, travel platforms, and hospitality groups depend on databases for reservations, guest profiles, loyalty programs, pricing, billing, inventory, and customer engagement. A slow booking platform can directly translate into lost revenue. Enteros helps travel and hospitality organizations optimize database performance through Database Observability, AI-powered Analytics, SQL Performance Intelligence, Predictive Analytics, Operational Intelligence, … Continue reading “How to Optimize Travel and Hospitality Operations with Enteros Database Software, AI-Powered Analytics, and Database Observability”
Driving Smarter Healthcare IT Operations with AIOps, FinOps, and Database Observability
Introduction Healthcare organizations are undergoing a major digital transformation. Electronic health records (EHRs), patient portals, telehealth platforms, healthcare insurance systems, clinical applications, medical imaging, digital pharmacies, revenue-cycle platforms, and data-driven decision systems now depend on complex IT infrastructure. As healthcare becomes increasingly digital, IT teams face a difficult challenge: maintaining reliable, high-performance applications while controlling … Continue reading “Driving Smarter Healthcare IT Operations with AIOps, FinOps, and Database Observability”
How to Optimize Media and Entertainment Operations with Enteros Database Software, AI-Powered Analytics, and Database Observability
Introduction Media and entertainment organizations increasingly depend on digital platforms for streaming, publishing, advertising, subscriptions, content management, audience analytics, and personalization. Every stream, subscription, content search, advertisement, recommendation, and customer interaction depends on databases. Enteros helps media companies optimize these environments through Database Observability, AI-powered Analytics, SQL Performance Intelligence, Operational Intelligence, Predictive Analytics, Root Cause … Continue reading “How to Optimize Media and Entertainment Operations with Enteros Database Software, AI-Powered Analytics, and Database Observability”
How to Optimize Logistics and Transportation Operations with Enteros Database Software, AI-Powered Analytics, and Database Observability
- 18 August 2026
- Database Performance Management
Introduction Logistics and transportation companies operate in an environment where timing, visibility, and data accuracy are critical. Every shipment, delivery, warehouse transaction, route update, fleet event, and customer interaction generates data. Modern logistics organizations rely on Transportation Management Systems (TMS), Warehouse Management Systems (WMS), ERP, fleet management, order management, customer portals, supply chain analytics, and … Continue reading “How to Optimize Logistics and Transportation Operations with Enteros Database Software, AI-Powered Analytics, and Database Observability”