# PostgreSQL中插入数据

#### 这是Postgresql最短，最简单插入方法，你只需要按顺序的插入指定的值，所以，如果你有10列，你必须指定10个值。

```
-- 假设这里有个 "users" 表只有3列：: first_name, last_name, email, 并且按此顺序排列
users values ('John', 'Doe', 'john@dow.com');
```

#### 如果你有很多列，当时你想指定其中某一列：

```
insert into users (first_name) values ('John');
```

#### 如果想在列中插入JSON数据，只需要将JSON数据包裹在单引号字符串中。

```
insert into users (preferences) values ('{ "beta": true }')
```

#### 如果插入的数据违背了一个特定的约束，这是你可以使用 Postgres 在冲突子句中指定当发生这种情况时该怎么做，例如：想象你有一个webhook系统，你想优雅的处理webhook中重复的事情。

```
-- 如果我们已经记录（捕获）到 webhook 的冲突，就什么都不要做。
insert into stripe_webhooks (event_id)
values ('evt_123')
on conflict do nothing;
```

#### 你也可以在冲突的时候执行 "upserts"   (更新或插入)数据。

```
-- 如果你有一个唯一的email索引
insert into users (email, name)
value ('john@dow.com', 'Jane Doe')
on conflict (email) do update set name = excluded.name; -- excluded.name 指的是 'Jane Doe'
```
