我想在PostgreSQL的表上做一个大的更新,但是我不需要在整个操作中维护事务完整性,因为我知道我正在更改的列不会被写入或读取更新。 我想知道在psql控制台中是否有一种简单的方法来使这些types的操作更快。 例如,假设我有一个包含3500万行的“orders”表,我想这样做: UPDATE orders SET status = null; 为了避免被转移到偏离的讨论,让我们假设3500万列的所有状态值目前设置为相同(非空值),从而使索引无用。 这个声明的问题是生效需要很长时间(仅仅是因为locking),所有更改的行都被locking,直到整个更新完成。 此更新可能需要5个小时,而类似的 UPDATE orders SET status = null WHERE (order_id > 0 and order_id < 1000000); 可能需要1分钟。 超过三千五百万行,做上面的,并把它分成35块只需要35分钟,为我节省4小时25分钟。 我可以用脚本(在这里使用伪代码)进一步分解: for (i = 0 to 3500) { db_operation ("UPDATE orders SET status = null WHERE (order_id >" + (i*1000)" + " AND order_id <" + ((i+1)*1000) […]
我习惯了甲骨文,并在我的架构中创build一个dblink,然后像这样访问一个远程数据库: mytable@myremotedb ,反正有没有做到与PostgreSQL相同? 现在我正在使用这样的dblink: SELECT logindate FROM dblink('host=dev.toto.com user=toto password=isok dbname=totofamily', 'SELECT logindate FROM loginlog'); 当我执行这个命令,我得到以下错误: 提示:没有函数匹配给定的名称和参数types。 您可能需要添加明确的types转换。 有人有想法吗? 我们必须“激活”dblinks或使用它们之前做一些事情吗? 在我们要查询的远程数据库上有什么要做的吗? 我们是否也必须激活dblink? 我一直有一个could not establish connection 。 这是行是types的: SELECT dblink_connect_u('host=xxxx dbname=mydb user=root port=5432'); IP地址正确,Postgres在远程服务器上运行。 任何想法?