我在 Postgres 9.1 数据库中有两个表 ( table1, table2)。两者都有 oid 类型。每张表100万条记录。而pg_largeobject表的大小约为40GB。我从每个表中删除了 90 万条记录,并执行了以下命令。
vacuum full analyze table1;
vacuum full analyze table2;
Run Code Online (Sandbox Code Playgroud)
pg_largeobject表大小仍然没有变化(启用自动真空)
我也需要执行上面的命令来pg_largeobject表吗?会影响什么吗?
我有一个表,它有一个 oid 列。当我备份这个表时,它需要完整的 oids(完整的 blob/oids 备份)。但是我的表只有 10 个条目(在 pg_largeobject 表中大约有 30 个条目)。我阅读了以下链接并将-o和-b添加到备份参数中。
https://www.postgresql.org/docs/9.1/static/app-pgdump.html
我正在使用以下命令进行备份。
pg_dump -i -h myhost -p 5432 -U myuser -F c -v -t schema.my_table -o -b -f mytablebkp.backup "mydb"
Run Code Online (Sandbox Code Playgroud)
该命令有什么问题吗?我怎样才能只备份特定的表,只备份属于它的那些 blob?
更新:
我从文档(https://www.postgresql.org/docs/9.5/static/app-pgrestore.html)中阅读了以下内容,
pg_restore 不能有选择地恢复大对象;例如,只有特定表的那些。如果存档包含大对象,则将还原所有大对象,如果通过 -L、-t 或其他选项排除它们,则不还原任何大对象
由于 pg_restore 不能进行选择性还原,是否没有办法/可能性使用 blob / oid 进行选择性表备份?
我正在copy从函数执行命令
execute 'copy (select * from tableName) to ''/tmp/result.txt'''
Run Code Online (Sandbox Code Playgroud)
它工作正常。但是,tableName是动态的,将有更多的表(循环迭代)。result.txt只有最后一次迭代(表)数据。
如果必须的话,我可以通过命令行使用\o或>>附加到文件中。但是,我必须使用该功能。
我读了http://shuber.io/reading-from-the-filesystem-with-postgres/。它建议使用临时表的解决方案。我可以做类似的事情,但没有临时表吗?(我必须避免归档日志)。创建临时表会创建存档日志吗?
有没有办法copy在函数中附加命令?
我有这样的字符串值
'[123, 124]'
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令修剪值
select trim('[123, 124]', '[]'); --returning '123, 124' as text
Run Code Online (Sandbox Code Playgroud)
我想将上面的值传递为
select *
from mytable
where numeric_column in (select trim('[123, 124]', '[]'));
Run Code Online (Sandbox Code Playgroud)
我能理解,numeric_column是数字。但是内部查询将数据作为文本返回。我无法将内部查询转换为,numeric因为它有一个逗号。如果我想将结果转换为'123', '124',我可以运行以下命令并获得预期结果:
select *
from mytable
where numeric_column::text in (
select func_to_change(select trim('[123, 124]', '[]'))
);
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?什么是func_to_change我需要写什么逻辑?
注意:我使用的是 Postgresql 9.1。
最近,我的一个数据库遇到了 XID 环绕问题。所以,我从模式开始single-user并运行vacuum。一切都很好。但是,当我检查datfrozenxid它时,它约为 15 亿,而我的txid_current约为 700 亿。我觉得,它有很大的不同,有些东西是错误的。
下面的查询,我曾经看到datfrozenxid过pg_database
select datname, datfrozenxid, age(datfrozenxid) from pg_database order by datname;
Run Code Online (Sandbox Code Playgroud)
我已从http://www.rummandba.com/2014/02/understanding-xid-wrap-around.html阅读了 XID 环绕场景
根据上面链接中给出的示例,这对我来说很有意义。但是,我用我的统计数据计算过xidWrapLimit,,,,xidStopLimit。xidWarnLimitxidVacLimit
xidWrapLimit = oldest_datfrozenxid + (MaxTransactionId >> 1);
xidStopLimit = xidWrapLimit - 1000000;
xidWarnLimit = xidStopLimit - 10000000;
(I haven't given all the values here since I am looking only for xidWarnLimit)
Run Code Online (Sandbox Code Playgroud)
所以,这xidWarnLimit是 37.47 亿,而我目前的金额txid_current超过 700 亿。奇怪的是,这个数字txid_current …