mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-21 01:00:48 +00:00
7c91b1d6e6
Signed-off-by: Slach <bloodjazman@gmail.com>
102 lines
3.7 KiB
Markdown
102 lines
3.7 KiB
Markdown
---
|
||
toc_priority: 42
|
||
toc_title: postgresql
|
||
---
|
||
|
||
# postgresql {#postgresql}
|
||
|
||
Allows `SELECT` and `INSERT` queries to be performed on data that is stored on a remote PostgreSQL server.
|
||
|
||
**Syntax**
|
||
|
||
``` sql
|
||
postgresql('host:port', 'database', 'table', 'user', 'password')
|
||
```
|
||
|
||
**Arguments**
|
||
|
||
- `host:port` — PostgreSQL server address.
|
||
|
||
- `database` — Remote database name.
|
||
|
||
- `table` — Remote table name.
|
||
|
||
- `user` — PostgreSQL user.
|
||
|
||
- `password` — User password.
|
||
|
||
|
||
SELECT Queries on PostgreSQL side run as `COPY (SELECT ...) TO STDOUT` inside read-only PostgreSQL transaction with commit after each `SELECT` query.
|
||
|
||
Simple `WHERE` clauses such as `=, !=, >, >=, <, <=, IN` are executed on the PostgreSQL server.
|
||
|
||
All joins, aggregations, sorting, `IN [ array ]` conditions and the `LIMIT` sampling constraint are executed in ClickHouse only after the query to PostgreSQL finishes.
|
||
|
||
INSERT Queries on PostgreSQL side run as `COPY "table_name" (field1, field2, ... fieldN) FROM STDIN` inside PostgreSQL transaction with auto-commit after each `INSERT` statement.
|
||
|
||
PostgreSQL Array types converts into ClickHouse arrays.
|
||
Be careful in PostgreSQL an array data created like type_name[] may contain multi-dimensional arrays of different dimensions in different rows in same column, but in ClickHouse only allows multi-dimensional arrays of the same count of dimension in all rows in same column in table.
|
||
|
||
**Returned Value**
|
||
|
||
A table object with the same columns as the original PostgreSQL table.
|
||
|
||
!!! info "Note"
|
||
In the `INSERT` query to distinguish table function `postgresql(...)` from table name with column names list you must use keywords `FUNCTION` or `TABLE FUNCTION`. See examples below.
|
||
|
||
**Examples**
|
||
|
||
Table in PostgreSQL:
|
||
|
||
``` text
|
||
postgres=# CREATE TABLE "public"."test" (
|
||
"int_id" SERIAL,
|
||
"int_nullable" INT NULL DEFAULT NULL,
|
||
"float" FLOAT NOT NULL,
|
||
"str" VARCHAR(100) NOT NULL DEFAULT '',
|
||
"float_nullable" FLOAT NULL DEFAULT NULL,
|
||
PRIMARY KEY (int_id));
|
||
|
||
CREATE TABLE
|
||
|
||
postgres=# insert into test (int_id, str, "float") VALUES (1,'test',2);
|
||
INSERT 0 1
|
||
|
||
postgresql> select * from test;
|
||
int_id | int_nullable | float | str | float_nullable
|
||
--------+--------------+-------+------+----------------
|
||
1 | | 2 | test |
|
||
(1 row)
|
||
```
|
||
|
||
Selecting data from ClickHouse:
|
||
|
||
```sql
|
||
SELECT * FROM postgresql('localhost:5432', 'test', 'test', 'postgresql_user', 'password') WHERE str IN ('test');
|
||
```
|
||
|
||
``` text
|
||
┌─int_id─┬─int_nullable─┬─float─┬─str──┬─float_nullable─┐
|
||
│ 1 │ ᴺᵁᴸᴸ │ 2 │ test │ ᴺᵁᴸᴸ │
|
||
└────────┴──────────────┴───────┴──────┴────────────────┘
|
||
```
|
||
|
||
Inserting:
|
||
|
||
```sql
|
||
INSERT INTO TABLE FUNCTION postgresql('localhost:5432', 'test', 'test', 'postgrsql_user', 'password') (int_id, float) VALUES (2, 3);
|
||
SELECT * FROM postgresql('localhost:5432', 'test', 'test', 'postgresql_user', 'password');
|
||
```
|
||
|
||
``` text
|
||
┌─int_id─┬─int_nullable─┬─float─┬─str──┬─float_nullable─┐
|
||
│ 1 │ ᴺᵁᴸᴸ │ 2 │ test │ ᴺᵁᴸᴸ │
|
||
│ 2 │ ᴺᵁᴸᴸ │ 3 │ │ ᴺᵁᴸᴸ │
|
||
└────────┴──────────────┴───────┴──────┴────────────────┘
|
||
```
|
||
|
||
**See Also**
|
||
|
||
- [The ‘PostgreSQL’ table engine](../../engines/table-engines/integrations/postgresql.md)
|
||
- [Using PostgreSQL as a source of external dictionary](../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md#dicts-external_dicts_dict_sources-postgresql)
|