vacuumlo — 从PostgreSQL数据库中移除孤立的大对象
vacuumlo
[option
...] dbname
...
vacuumlo是一个从PostgreSQL数据库中移除“孤立”大对象的简单使用程序。一个孤立的大对象(LO)是指其OID不出现在数据中任何oid
或lo
数据列中的LO。
如果你使用该程序,你也许还会对lo模块中的lo_manage
触发器感兴趣。lo_manage
对于避免创建孤立LO有用处。
在命令行中提到的所有数据库都将被处理。
vacuumlo接受下列命令行参数:
-l limit
--limit=limit
在每一个事务中移除不超过limit
个大对象(默认值为1000)。因为移除每一个LO时服务器都将要求一个锁,所以在一个事务中移除过多的LO会有超过max_locks_per_transaction的风险。如果你想在一个事务中就完成所有的移除工作,请将这个限制设置为0。
-n
--dry-run
不移除任何东西,只是显示将会做什么。
-v
--verbose
写一些进度消息。
-V
--version
打印vacuumlo的版本并退出。
-?
--help
显示关于vacuumlo的命令行参数,并且退出。
vacuumlo也接受下列命令行参数用于连接:
-h host
--host=host
数据库服务器的主机名。
-p port
--port=port
数据库服务器的端口。
-U username
--username=username
用于连接的用户名。
-w
--no-password
不要发出一个口令提示。如果服务器要求口令认证并且没有其他方式可以提供一个口令(例如一个.pgpass
文件),连接尝试将会失败。这个选项可用于批处理任务以及脚本,因为在这些情况下不会有用户输入口令。
-W
--password
强制vacuumlo在连接到数据库之前提示要求一个口令。
这个选项不是不可缺少的,因为如果服务器要求口令认证,vacuumlo会自动提示要求一个口令。但是,vacuumlo将会浪费一次连接尝试来了解到服务器需要口令。在某些情况,值得用-W
来避免这种额外的连接尝试。
vacuumlo按照下列方法工作:首先vacuumlo建立一个临时表,其中包含所选择数据库中所有大对象的OID。然后它会扫描数据库中所有类型为oid
或lo
的列,并且从临时表中移除在这些列中出现过的OID(注意:只有类型为这些名字的才被考虑,特别的,在这些类型之上的域是不被考虑的)。临时表中剩下的项就标识了鼓励LO。它们将被移除。
Peter Mount <[email protected]>