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
The Future of Financial RevOps: Enteros’ AIOps-Powered Framework for Precision Cost Estimation
- 8 December 2025
- Database Performance Management
Introduction The financial sector is undergoing a massive transformation driven by digital acceleration, regulatory pressure, cloud migration, AI adoption, and rising customer expectations. Banks, insurance companies, fintechs, and wealth management firms now operate in a hyper-competitive landscape where agility, accuracy, and operational efficiency determine long-term success. Within this environment, Revenue Operations (RevOps) has emerged as … Continue reading “The Future of Financial RevOps: Enteros’ AIOps-Powered Framework for Precision Cost Estimation”
What Technology Teams Gain from Enteros’ GenAI-Driven Database Performance and Cloud FinOps Intelligence
Introduction The technology sector is entering a new era—one where rapid innovation, distributed architectures, and cloud-native systems fuel unprecedented digital acceleration. Yet behind this momentum sits a challenge that every CTO, DevOps leader, and cloud architect knows all too well: how do you maintain high performance, manage cost efficiency, and ensure seamless database reliability across … Continue reading “What Technology Teams Gain from Enteros’ GenAI-Driven Database Performance and Cloud FinOps Intelligence”
What Retail Tech Teams Gain from Enteros’ AI-Driven Cost Estimation and Database Optimization Platform
- 7 December 2025
- Database Performance Management
Introduction The retail industry is undergoing one of the most aggressive digital evolutions in history. From omnichannel customer experiences and real-time inventory management to personalization engines and AI-driven demand forecasting, today’s retail IT environments are powered by complex, high-volume databases and cloud ecosystems. Behind every transaction, search query, delivery update, and loyalty personalization lies a … Continue reading “What Retail Tech Teams Gain from Enteros’ AI-Driven Cost Estimation and Database Optimization Platform”
How Enteros Transforms Banking IT: Database Optimization Powered by Cloud FinOps and RevOps Intelligence
Introduction The banking sector is undergoing rapid digital modernization. Customers expect real-time transactions, instant approvals, personalized insights, mobile-first experiences, and zero downtime. At the core of this digital revolution lies one essential asset: data. Modern banks now operate massive volumes of structured and unstructured data across core banking systems, digital payments, fraud detection engines, credit … Continue reading “How Enteros Transforms Banking IT: Database Optimization Powered by Cloud FinOps and RevOps Intelligence”