Skip to main content
Version: 0.7.0-incubating

PostgreSQL catalog

Introduction

Apache Gravitino provides the ability to manage PostgreSQL metadata.

caution

Gravitino saves some system information in schema and table comment, like (From Gravitino, DO NOT EDIT: gravitino.v1.uid1078334182909406185), please don't change or remove this message.

Catalog

Catalog capabilities

  • Gravitino catalog corresponds to the PostgreSQL database.
  • Supports metadata management of PostgreSQL (12.x, 13.x, 14.x, 15.x, 16.x).
  • Supports DDL operation for PostgreSQL schemas and tables.
  • Supports table index.
  • Supports column default value. and auto-increment.

Catalog properties

Any property that isn't defined by Gravitino can pass to PostgreSQL data source by adding gravitino.bypass. prefix as a catalog property. For example, catalog property gravitino.bypass.maxWaitMillis will pass maxWaitMillis to the data source property. You can check the relevant data source configuration in data source properties

When you use the Gravitino with Trino. You can pass the Trino PostgreSQL connector configuration using prefix trino.bypass.. For example, using trino.bypass.join-pushdown.strategy to pass the join-pushdown.strategy to the Gravitino PostgreSQL catalog in Trino runtime.

If you use JDBC catalog, you must provide jdbc-url, jdbc-driver, jdbc-database, jdbc-user and jdbc-password to catalog properties. Besides the common catalog properties, the PostgreSQL catalog has the following properties:

Configuration itemDescriptionDefault valueRequiredSince Version
jdbc-urlJDBC URL for connecting to the database. You need to specify the database in the URL. For example jdbc:postgresql://localhost:3306/pg_database?sslmode=require.(none)Yes0.3.0
jdbc-driverThe driver of the JDBC connection. For example org.postgresql.Driver.(none)Yes0.3.0
jdbc-databaseThe database of the JDBC connection. Configure it with the same value as the database in the jdbc-url. For example pg_database.(none)Yes0.3.0
jdbc-userThe JDBC user name.(none)Yes0.3.0
jdbc-passwordThe JDBC password.(none)Yes0.3.0
jdbc.pool.min-sizeThe minimum number of connections in the pool. 2 by default.2No0.3.0
jdbc.pool.max-sizeThe maximum number of connections in the pool. 10 by default.10No0.3.0
caution

You must download the corresponding JDBC driver to the catalogs/jdbc-postgresql/libs directory. You must explicitly specify the database in both jdbc-url and jdbc-database. An error may occur if the values in both aren't consistent.

info

In PostgreSQL, the database corresponds to the Gravitino catalog, and the schema corresponds to the Gravitino schema.

Catalog operations

Please refer to Manage Relational Metadata Using Gravitino for more details.

Schema

Schema capabilities

  • Gravitino schema corresponds to the PostgreSQL schema.
  • Supports creating schema with comments.
  • Supports dropping schema.
  • Supports cascade dropping schema.

Schema properties

  • Doesn't support any schema property settings.

Schema operations

Please refer to Manage Relational Metadata Using Gravitino for more details.

Table

Table capabilities

  • The Gravitino table corresponds to the PostgreSQL table.
  • Supports DDL operation for PostgreSQL tables.
  • Supports index.
  • Support column default value and auto-increment.
  • Doesn't support table property settings.

Table column types

Gravitino TypePostgreSQL Type
BooleanBool
ShortInt2
IntegerInt4
LongInt8
FloatFloat4
DoubleFloat8
StringText
DateDate
TimeTime
TimestampTimestamp
Timestamp_tzTimestamptz
DecimalNumeric
VarCharVarchar
FixedCharBpchar
BinaryBytea
ListArray
info

PostgreSQL doesn't support Gravitino Fixed Struct Map IntervalDay IntervalYear Union UUID type. Meanwhile, the data types other than listed above are mapped to Gravitino External Type that represents an unresolvable data type since 0.6.0-incubating.

Table column auto-increment

  • Supports setting auto-increment.

Table properties

  • Doesn't support table properties.

Table indexes

  • Supports PRIMARY_KEY and UNIQUE_KEY.
{
"indexes": [
{
"indexType": "primary_key",
"name": "id_pk",
"fieldNames": [["id"]]
},
{
"indexType": "unique_key",
"name": "id_name_uk",
"fieldNames": [["id"] ,["name"]]
}
]
}

Table operations

Please refer to Manage Relational Metadata Using Gravitino for more details.

Alter table operations

Supports operations:

  • RenameTable
  • UpdateComment
  • AddColumn
  • DeleteColumn
  • RenameColumn
  • UpdateColumnType
  • UpdateColumnNullability
  • UpdateColumnComment
  • UpdateColumnDefaultValue
info

You can't submit the RenameTable operation at the same time as other operations.

caution

PostgreSQL doesn't support the UpdateColumnPosition operation, so you can only use ColumnPosition.defaultPosition() when AddColumn. If you update a nullability column to non nullability, there may be compatibility issues.