我在 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
。xidWarnLimit
xidVacLimit
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 …