PG Merge语法使用
分享
从PostgreSQL15开始支持Merge Into语法,以前版本可以使用insert ... do conflicts语法。
测试过程:
两台机器
源机器 100.138 PostgreSQL 11.5
目标机器 100.51 PostgreSQL 17.4 (编译安装的时候需要把dblink扩展加上)
数据情况如下:图层名字maincity(源和目标结构相同)
结构如下:
1. 记录情况
2. 在目标机器上创建dblink,以方便连接到源机器
当然本例子中访问远程数据库使用的是老的dblink,现在更多的使用postgres_fdw,以外部表形势访问也可以的。
3. 把objectid小于1200的同步过来
4. 查询目标机器
文章来源:http://blog.csdn.net/liufeng1980423/article/details/145897366
测试过程:
两台机器
源机器 100.138 PostgreSQL 11.5
目标机器 100.51 PostgreSQL 17.4 (编译安装的时候需要把dblink扩展加上)
数据情况如下:图层名字maincity(源和目标结构相同)
结构如下:
\d maincity
数据表 "sde.maincity"
栏位 | 类型 | 校对规则 | 可空的 | 预设
-------------------+-----------------------+----------+----------+------
objectid | integer | | not null |
name | character varying(30) | | |
adclass | smallint | | |
pinyin | character varying(50) | | |
gdb_geomattr_data | bytea | | |
shape | geometry | | |
索引:
"a153_ix1" gist (shape)
"r186_sde_rowid_uk" UNIQUE, btree (objectid) WITH (fillfactor='75')
检查约束限制
"enforce_shape_srid" CHECK (st_srid(shape) = 4326)
1. 记录情况
源机器
select count(*) from maincity;
count
-------
1530
目标机器
select count(*) from maincity ;
count
-------
200
2. 在目标机器上创建dblink,以方便连接到源机器
当然本例子中访问远程数据库使用的是老的dblink,现在更多的使用postgres_fdw,以外部表形势访问也可以的。
select dblink_connect('138_test','host=192.168.100.138 dbname=test port=5432 user=sde password=sde');
dblink_connect
----------------
OK
select dblink_get_connections();
dblink_get_connections
------------------------
{138_test}
dblink的连接信息,是保存在后台进程的TopMemoryContext的remoteConnHash表中的,因此只对当前连接有效。连接推出后,会销毁,下次连接需要重新创建
3. 把objectid小于1200的同步过来
merge into maincity as dst
using dblink('138_test','select * from maincity where objectid<=1200') as src(objectid integer,name varchar(30),adclass smallint,pinyin varchar(50),gdb_geomattr_data bytea,shape geometry)
on(dst.objectid=src.objectid)
when matched then update set name=src.name,adclass=src.adclass,pinyin=src.pinyin,gdb_geomattr_data=src.gdb_geomattr_data,shape=src.shape
when not matched then insert (objectid,name,adclass,pinyin,gdb_geomattr_data,shape) values (src.objectid,src.name,src.adclass,src.pinyin,src.gdb_geomattr_data,src.shape)
MERGE 1200
4. 查询目标机器
select count(*) from maincity ;
count
-------
1200
文章来源:http://blog.csdn.net/liufeng1980423/article/details/145897366
0 个评论
相关问题
- 如何优雅的使用ArcGIS知乎?
- 苹果系统下可以使用arcgis 吗?
- Arcgis的地位不可撼动,那有必要掌握使用其他GIS软件吗
- 请问arcmap如何使用多线程?
- 在Visual studio 2015 中使用 Arcgis API for JavaScript v3.16 如何实现代码智能提示?
- 如何使用脚本或其他方法,将图层属性中属性域原值内容替换为属性域描述?
- arcgis runtime for andriod 100.1 如何使用eclipse开发
- 使用ArcGIS Desktop10.2版本,如何设置图例横着放且label在正下方?
- 请问如何使用ArcEngine实现(在右击图例中)Convert To Gtaphics这一功能?
- 使用ArcGIS Server解析DEM等格式文件
- 使用portal10.5能直接发布三维模型服务吗