postgresql建表 id自动生成递增
时间: 2025-06-19 21:42:54 浏览: 7
### PostgreSQL 创建自增 ID 表的解决方案
在 PostgreSQL 中,可以通过 `SERIAL` 或 `IDENTITY` 列来实现自增 ID 的功能。以下是两种方法的详细说明和代码示例:
#### 方法一:使用 SERIAL
`SERIAL` 是 PostgreSQL 提供的一个伪数据类型,用于生成自动递增的整数列。
```sql
CREATE TABLE example_table (
id SERIAL PRIMARY KEY, -- 自增 ID
name VARCHAR(255) NOT NULL,
create_time TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
```
`SERIAL` 实际上是一个快捷方式,它会在后台创建一个序列(sequence),并将其与该列关联[^1]。
#### 方法二:使用 IDENTITY
从 PostgreSQL 10 开始,推荐使用 `IDENTITY` 列,因为它符合 SQL 标准。
```sql
CREATE TABLE example_table (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -- 自增 ID
name VARCHAR(255) NOT NULL,
create_time TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
```
`IDENTITY` 提供了更灵活的配置选项,并且明确指定了生成策略为 `ALWAYS` 或 `BY DEFAULT`[^2]。
---
### 关于 `org.opentest4j.AssertionFailedError` 和 `org.graalvm.polyglot.PolyglotException` 的分析
#### `org.opentest4j.AssertionFailedError`
此错误通常发生在测试框架中,表示断言失败。具体原因可能是:
- 测试期望的结果与实际结果不匹配。
- 响应内容或状态码不符合预期。
例如,在 Karate 测试中,如果响应的状态码不是 200,或者返回的内容与预期不符,则会抛出此异常[^3]。
解决方法:
- 确保测试用例中的断言条件正确无误。
- 检查接口的实际返回值是否符合预期。
#### `org.graalvm.polyglot.PolyglotException: SyntaxError: Missing space after numeric literal`
此错误表明 JavaScript 解析器遇到了语法问题,通常是由于以下原因之一:
- 数字字面量后缺少空格。
- 请求体或脚本中的语法格式不正确。
例如,`1L` 在 JavaScript 中不是一个有效的数字字面量,因为 JavaScript 不支持长整型(`L` 后缀)[^4]。
解决方法:
- 如果需要表示长整型,请使用标准的 JavaScript 数字类型(如 `BigInt`)。
- 确保脚本或请求体中的语法格式正确。
---
### 示例代码修正
假设在 Karate 测试中遇到上述错误,可以参考以下修正后的代码:
```gherkin
Feature: 测试接口
Background:
* url 'http://localhost:8080'
Scenario: 测试有效输入
Given path '/submit'
And request { "id": 1n, "name": "Test" } # 使用 BigInt 表示长整型
When method post
Then status 200
And match response == { "message": "Success" }
```
---
###
阅读全文
相关推荐













