保持PostgreSQL(FDW)外部架构同步

时间:2017-08-29 12:16:44

标签: database postgresql foreign-data-wrapper

使用带有postgres_fdw扩展名的Postgres 9.6,有没有办法让本地架构中的表与远程数据库中的表保持同步?我经常需要在远程数据库的包装模式中添加新表,并希望通过FDW在本地访问它们,而不必删除和重新导入我的外部模式或单个表来进行。

我正在寻找REFRESH FOREIGN SCHEMA schema_name等命令。

3 个答案:

答案 0 :(得分:0)

我认为没有刷新,但丢弃和导入应该不到一秒钟:

if ((len = recvfrom(sock, &client_start, sizeof(client_start), 0,(struct sockaddr *)&client_address,&client_address_len))<0){
if((send = sendto(sock, &server_start, sizeof(server_start),0,(struct sockaddr *)&client_address,
       &client_address_len))<0){

答案 1 :(得分:0)

拖放和重新创建绝对可以,但是我不喜欢它,因为我经常有依赖于本地表(引用外部模式)的视图,因此删除模式也将删除所有视图。要解决此问题,您可以重新导入外部模式,但只能将其限制为已创建的新表:

IMPORT FOREIGN SCHEMA <foreign_schema> 
    LIMIT TO (<new_table1>, <new_table2>)
    FROM SERVER <foreign_server>
    INTO <local_schema>;

答案 2 :(得分:0)

使用最新的postgres(我正在使用13),以下工作就像从psql刷新一样。引用这些表是为了避免使用类似于SQL关键字的表来混淆解析器。

SELECT 'IMPORT FOREIGN SCHEMA <foreign_schema> EXCEPT ('|| 
   (SELECT string_agg('"'||table_name||'"',',') 
   FROM information_schema.tables 
   WHERE table_schema='<local_schema>') ||') 
FROM SERVER <foreign_server> INTO <local_schema>'\gexec

应该直接使用EXECUTE FORMAT而不是select和string并置为函数。