# Postgresql Writer
PostgresqlWriter 插件实现了写入数据到 [PostgreSQL](https://postgresql.org) 数据库库表的功能。
## 示例
以下配置演示从 postgresql 指定的表读取数据,并插入到具有相同表结构的另外一张表中,用来测试该插件所支持的数据类型。
### 表结构信息
假定建表语句以及输入插入语句如下:
`sql
--8<-- "sql/postgresql.sql"
`
创建需要插入的表的语句如下:
`sql
create table addax_tbl1 like addax_tbl;
`
### 任务配置
以下是配置文件
=== "job/pg2pg.json"
`json
--8<-- "jobs/pgwriter.json"
`
将上述配置文件保存为 job/pg2pg.json
### 执行采集命令
执行以下命令进行数据采集
`shell
bin/addax.sh job/pg2pg.json
`
## 参数说明
配置项 | 是否必须 | 默认值 | 描述 |
:-------- | :------: | ------ | ---------------------------------------------------------------------------------------------------------------- |
jdbcUrl | 是 | 无 | 对端数据库的 JDBC 连接信息,jdbcUrl 按照 RDBMS 官方规范,并可以填写连接 [附件控制信息][1] |
username | 是 | 无 | 数据源的用户名 |
password | 否 | 无 | 数据源指定用户名的密码 |
writeMode | 否 | insert | 写入模式,支持 insert, update 详见如下 |
table | 是 | 无 | 所选取的需要同步的表名,使用 JSON 数据格式,当配置为多张表时,用户自己需保证多张表是同一表结构 |
column | 是 | 无 | 所配置的表中需要同步的列名集合,详细描述见 [rdbmswriter](../rdbmswriter) |
preSql | 否 | 无 | 执行数据同步任务之前率先执行的 sql 语句,目前只允许执行一条 SQL 语句,例如清除旧数据,涉及到的表可用
`@table`表示 |
postSql | 否 | 无 | 执行数据同步任务之后执行的 sql 语句,目前只允许执行一条 SQL 语句,例如加上某一个时间戳 |
batchSize | 否 | 1024 | 定义了插件和数据库服务器端每次批量数据获取条数 |
[1]: http://jdbc.postgresql.org/documentation/93/connect.html
### writeMode
默认情况下, 采取 insert into 语法写入 postgresql 表,如果你希望采取主键存在时更新,不存在则写入的方式, 可以使用 update 模式。假定表的主键为 id ,则 writeMode 配置方法如下:
`json
"writeMode": "update(id)"
`
如果是联合唯一索引,则配置方法如下:
`json
"writeMode": "update(col1, col2)"
`
注: update 模式在 3.1.6 版本首次增加,之前版本并不支持。
## 类型转换
目前 PostgresqlWriter 支持大部分 PostgreSQL 类型,但也存在部分没有支持的情况,请注意检查你的类型。
下面列出 PostgresqlWriter 针对 PostgreSQL 类型转换列表:
Addax 内部类型 | PostgreSQL 数据类型 |
-------------- | --------------------------------------------------------- |
Long | bigint, bigserial, integer, smallint, serial |
Double | double precision, money, numeric, real |
String | varchar, char, text, bit, inet,cidr,macaddr,uuid,xml,json |
Date | date, time, timestamp |
Boolean | bool |
Bytes | bytea |
## 已知限制
除以上列出的数据类型外,其他数据类型理论上均为转为字符串类型,但不确保准确性