pgsql新增语句
时间: 2025-05-15 07:10:40 浏览: 19
### PostgreSQL 插入数据的 SQL 语句
在 PostgreSQL 中,`INSERT` 语句用于向表中插入新记录。以下是 `INSERT` 的基本语法:
```sql
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
```
#### 基本示例
假设有一个名为 `users` 的表,其结构如下:
- id: SERIAL PRIMARY KEY
- name: VARCHAR(50)
- age: INTEGER
可以使用以下语句插入一条记录[^1]。
```sql
INSERT INTO users (name, age) VALUES ('Alice', 25);
```
这条语句会将名字为 Alice、年龄为 25 的记录插入到 `users` 表中。
---
#### 使用返回值功能
如果希望在插入后获取生成的主键值(例如序列号),可以使用 `RETURNING` 子句。
```sql
INSERT INTO users (name, age) VALUES ('Bob', 30) RETURNING id;
```
此语句不仅插入了一条记录,还会返回刚刚插入的记录的 `id` 值。
---
#### 处理冲突的情况
当存在唯一约束或主键冲突时,可以通过 `ON CONFLICT DO UPDATE` 来实现更新操作。
假设 `users` 表中的 `name` 列具有唯一约束,则可以用以下方式处理冲突并更新现有记录:
```sql
INSERT INTO users (name, age) VALUES ('Alice', 30)
ON CONFLICT (name) DO UPDATE SET age = EXCLUDED.age;
```
这里的关键字 `EXCLUDED` 是一个特殊的表,表示试图插入但因冲突而未成功插入的数据。
---
#### 自定义生成导出数据的 Insert 语句
对于批量导入场景,有时需要动态生成 `INSERT` 语句以便于迁移数据。通过 PL/pgSQL 可以构建这样的逻辑[^2]。
下面是一个简单的例子,展示如何生成针对某张表的 `INSERT` 脚本:
```plpgsql
DO $$
DECLARE
sqlInsert TEXT;
BEGIN
sqlInsert := 'SELECT ''INSERT INTO "users" (' || string_agg(column_name::text, ', ') || ')' ||
' VALUES (''' || string_agg('''' || quote_literal(column_value) || '''', ', ') || ');'''
FROM information_schema.columns WHERE table_name='users';
RAISE NOTICE '%', sqlInsert;
END $$;
```
上述脚本可以根据指定表名生成对应的 `INSERT` 语句模板。
---
阅读全文
相关推荐

















