ANSI Compatibility
GreptimeDB supports a subset of ANSI SQL and has some unique extensions. Some major incompatibilities and extensions are described below:
- Create a table:
- Supports the unique
TIME INDEX
constraint. Please refer to the Data Model and the CREATE table creation syntax for details. - Currently only supports
PRIMARY KEY
constraints and does not support other types of constraints or foreign keys. - GreptimeDB is a native distributed database, so the table creation syntax for distributed tables supports partitioning rules. Please also refer to the CREATE.
- Supports the unique
- Insert data: Consistent with ANSI SQL syntax, but requires the
TIME INDEX
column value (or default value) to be provided. - Update data: Does not support
UPDATE
syntax, but if the primary key andTIME INDEX
corresponding column values are the same duringINSERT
, subsequent inserted rows will overwrite previously written rows, effectively achieving an update.- Since 0.8, GreptimeDB supports append mode that creates an append-only table with
append_mode="true"
option which keeps duplicate rows. - GreptimeDB supports merge mode that creates a table with
merge_mode="last_non_null"
option which allow updating a field partially.
- Since 0.8, GreptimeDB supports append mode that creates an append-only table with
- Query data: Query syntax is compatible with ANSI SQL, with some functional differences and omissions.
- Since v0.9.0, begins to support VIEW.
- TQL syntax extension: Supports executing PromQL in SQL via TQL subcommands. Please refer to the TQL section for details.
- Range Query to query and aggregate data within a range of time.
- Delete data: Deletion syntax is basically consistent with ANSI SQL.
- Others:
- Identifiers such as table names and column names have constraints similar to ANSI SQL, are case sensitive, and require double quotes when encountering special characters or uppercase letters.
- GreptimeDB has optimized identifier rules for different dialects. For example, when you connect with a MySQL or PostgreSQL client, you can use identifier rules specific to that SQL dialect, such as using backticks
`
for MySQL and standard double quotes"
for PostgreSQL.