您已从数据库中删除了该表,但尚未从 _YOURCLUSTERNAME.sl_table 中删除。
在 YOURCLUSTERNAME 之前的“_”很重要。
解决问题的 4 个步骤:
1.获取tab_id
从 _YOURCLUSTERNAME.sl_table 中选择 tab_id,其中 tab_relname='MYTABLENAME' 和 tab_nspname='MYSCHEMANAME'
它在 MYDATABASE 中返回一个数字 2
2.删除触发器
选择_YOURCLUSTERNAME.altertablerestore(2);
这可能会返回错误。因为它试图删除原表中的触发器,现在又多了一个。
3. 删除 slony 索引(如果已创建)
选择_YOURCLUSTERNAME.tableDropKey(2);这可能会返回错误。因为它试图删除原表中的一个索引,现在又多了一个新表。
4.从sl_table中删除表
从 tab_id = 2 的 _YOURCLUSTERNAME.sl_table 中删除;
删除表的最佳方法是:
1. 从集群中删除表:
从 _YOURCLUSTERNAME.sl_table 中选择 tab_id,其中 tab_relname='MYTABLENAME' 和 tab_nspname='MYSCHEMANAME'
它在 MYDATABASE 中返回一个数字 2
使用 slonik < myfile.slonik 执行
其中 myfile.slonik 是:集群名称=MYCLUSTER;节点 1 ADMIN CONNINFO = 'dbname=DATABASENAME host=HOST1_MASTER user=postgres port=5432'; 节点 2 ADMIN CONNINFO = 'dbname=DATABASENAME host=HOST2_SLAVE user=postgres port=5432';
设置删除表(id = 2,origin = 1);
2 是来自 sl_table 的 tab_id,1 是 NODE 1,HOST1_MASTER
2.从slave中删除表
使用 SQL 删除表