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
$11B at Stake — How Supply-Chain Delays Are Forcing Airlines to Fly Older Planes
- 7 November 2025
- Software Engineering
Introduction The aviation industry is entering 2025 at a critical inflection point. According to a joint report by the International Air Transport Association (IATA) and Oliver Wyman, global airlines could face over $11 billion in additional costs this year due to persistent supply-chain disruptions. The most visible consequence is the forced reliance on older, less … Continue reading “$11B at Stake — How Supply-Chain Delays Are Forcing Airlines to Fly Older Planes”
Enhancing Cost Estimation and Attribution in the Technology Sector: How Enteros Uses AI Performance Management to Drive Financial and Operational Efficiency
- 6 November 2025
- Database Performance Management
Introduction In the dynamic world of the technology sector, cost estimation and attribution have become as critical as innovation itself. As companies expand their cloud infrastructures, deploy AI-driven workloads, and manage vast databases across multi-cloud ecosystems, the challenge lies in maintaining both financial precision and performance optimization. Technology enterprises need a clear understanding of where … Continue reading “Enhancing Cost Estimation and Attribution in the Technology Sector: How Enteros Uses AI Performance Management to Drive Financial and Operational Efficiency”
Optimizing Retail Budgeting and Performance: How Enteros Combines AI SQL and AI Performance Management to Transform Database Efficiency
Introduction In the fast-paced retail sector, success depends on delivering seamless customer experiences, managing inventory efficiently, and controlling operational costs — all while keeping up with dynamic market demands. Retailers today rely on a digital ecosystem powered by databases, SaaS platforms, and AI technologies to manage everything from transactions and supply chains to personalized recommendations. … Continue reading “Optimizing Retail Budgeting and Performance: How Enteros Combines AI SQL and AI Performance Management to Transform Database Efficiency”
Revolutionizing the Fashion Sector: How Enteros Leverages Generative AI and AI Performance Management to Optimize SaaS Database Efficiency
- 5 November 2025
- Database Performance Management
Introduction The global fashion industry has always been a beacon of creativity, speed, and transformation. From runway collections to e-commerce platforms, the sector thrives on rapid innovation and data-driven decision-making. In today’s digital-first world, fashion enterprises—from luxury retailers to fast-fashion brands—are evolving into technology-driven organizations, heavily dependent on SaaS platforms, AI tools, and cloud databases … Continue reading “Revolutionizing the Fashion Sector: How Enteros Leverages Generative AI and AI Performance Management to Optimize SaaS Database Efficiency”