使用带有postgres_fdw
扩展名的Postgres 9.6,有没有办法让本地架构中的表与远程数据库中的表保持同步?我经常需要在远程数据库的包装模式中添加新表,并希望通过FDW在本地访问它们,而不必删除和重新导入我的外部模式或单个表来进行。
我正在寻找REFRESH FOREIGN SCHEMA schema_name
等命令。
答案 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并置为函数。