apache / apache/datafusion-sqlparser-rs
PostgreSQL 18 generated virtual columns require STORED
- Ngôn ngữ chính
- Rust
- Star
- 3.5k
- Fork
- 772
- Merge trung bình
- 4 ngày 9 giờ
- Pull request đã merge (30 ngày)
- 17
Mô tả
## Summary
`PostgreSqlDialect` rejects PostgreSQL 18 generated columns when the generated-column mode is omitted.
PostgreSQL 18 supports both stored and virtual generated columns. Per the PostgreSQL 18 docs, generated columns are virtual by default and `VIRTUAL` / `STORED` are optional explicit mode keywords:
https://www.postgresql.org/docs/current/ddl-generated-columns.html
## Reproduction
Using `sqlparser` 0.62.0 with `PostgreSqlDialect`, parse:
```sql
CREATE TABLE users (
first_name text NOT NULL,
last_name text NOT NULL,
name character varying(255)
GENERATED ALWAYS AS (((first_name || ' '::text) || last_name))
NOT NULL
);
```
## Expected behavior
The statement parses successfully, with `name` represented as a generated virtual column. Since PostgreSQL 18 defaults generated columns to virtual, omitted mode should be accepted as virtual or at least accepted with no explicit mode.
## Actual behavior
Parsing fails with:
```text
sql parser error: Expected: STORED, found: NOT
```
This also affects PostgreSQL 18 `pg_dump` output, which emits generated virtual columns without an explicit `VIRTUAL` keyword, for example:
```sql
name character varying(255) GENERATED ALWAYS AS (((first_name || ' '::text) || last_name)) NOT NULL
```
## Notes
`GenericDialect` can parse a variant when `VIRTUAL` is made explicit, but `PostgreSqlDialect` currently appears to require `STORED` after `GENERATED ALWAYS AS (...)`.
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Start at the PostgreSqlDialect handling for generated columns and reproduce the supplied CREATE TABLE statement with an omitted mode. Ensure PostgreSQL 18 virtual generated columns are accepted, then add or run regression coverage showing that the statement parses successfully without requiring STORED.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- postgresql, rust
- Lĩnh vực
- databases
- Loại issue
- Lỗi
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 73/100