2021-04-11 20:26:59 +00:00
---
toc_priority: 12
2021-07-13 15:56:07 +00:00
toc_title: MaterializedPostgreSQL
2021-04-11 20:26:59 +00:00
---
2021-06-27 19:09:17 +00:00
# MaterializedPostgreSQL {#materialize-postgresql}
2021-04-11 20:26:59 +00:00
## Creating a Table {#creating-a-table}
2021-05-04 10:43:21 +00:00
``` sql
2021-08-02 19:45:01 +00:00
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
2021-06-27 19:09:17 +00:00
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_replica', 'postgres_user', 'postgres_password')
2021-05-04 10:43:21 +00:00
PRIMARY KEY key;
```
2021-04-11 20:26:59 +00:00
## Requirements {#requirements}
2021-08-02 19:45:01 +00:00
1. The [wal_level ](https://www.postgresql.org/docs/current/runtime-config-wal.html ) setting must have a value `logical` and `max_replication_slots` parameter must have a value at least `2` in the PostgreSQL config file.
2021-04-11 20:26:59 +00:00
2021-08-02 19:45:01 +00:00
2. A table with `MaterializedPostgreSQL` engine must have a primary key — the same as a replica identity index (by default: primary key) of a PostgreSQL table (see [details on replica identity index ](../../database-engines/materialized-postgresql.md#requirements )).
2021-04-11 20:26:59 +00:00
2021-08-02 19:45:01 +00:00
3. Only database [Atomic ](https://en.wikipedia.org/wiki/Atomicity_(database_systems )) is allowed.
2021-05-04 10:43:21 +00:00
2021-08-02 19:45:01 +00:00
## Virtual columns {#virtual-columns}
2021-05-04 10:43:21 +00:00
2021-08-02 19:45:01 +00:00
- `_version` (type: UInt64)
2021-05-04 10:43:21 +00:00
2021-08-02 19:45:01 +00:00
- `_sign` (type: Int8)
2021-05-13 07:36:40 +00:00
2021-08-02 19:45:01 +00:00
These columns do not need to be added when a table is created. They are always accessible in `SELECT` query.
2021-05-13 07:36:40 +00:00
`_version` column equals `LSN` position in `WAL` , so it might be used to check how up-to-date replication is.
2021-05-04 10:43:21 +00:00
``` sql
2021-08-02 19:45:01 +00:00
CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64)
2021-06-27 19:09:17 +00:00
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgresql_replica', 'postgres_user', 'postgres_password')
2021-05-04 10:43:21 +00:00
PRIMARY KEY key;
2021-05-13 07:36:40 +00:00
2021-08-02 19:45:01 +00:00
SELECT key, value, _version FROM postgresql_db.postgresql_replica;
2021-05-04 10:43:21 +00:00
```
2021-06-27 19:09:17 +00:00
2021-08-02 19:45:01 +00:00
!!! warning "Warning"
Replication of [**TOAST** ](https://www.postgresql.org/docs/9.5/storage-toast.html ) values is not supported. The default value for the data type will be used.