小编Spi*_*ike的帖子

我可以对 pg_largeobject 表执行 VACUUM FULL 吗?

我在 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表吗?会影响什么吗?

postgresql blob postgresql-9.1

9
推荐指数
1
解决办法
1万
查看次数

带有 blob oid 的特定表的 postgres 备份

我有一个表,它有一个 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 进行选择性表备份?

postgresql blob postgresql-9.1 pg-dump

6
推荐指数
1
解决办法
5190
查看次数

postgresql 中的复制命令以追加数据

我正在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在函数中附加命令?

postgresql postgresql-9.1 copy

5
推荐指数
2
解决办法
1万
查看次数

如何将数值转换为sql中的文本以进行选择查询

我有这样的字符串值

'[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。

postgresql postgresql-9.1

3
推荐指数
1
解决办法
1324
查看次数

XID 环绕指标尚不清楚

最近,我的一个数据库遇到了 XID 环绕问题。所以,我从模式开始single-user并运行vacuum。一切都很好。但是,当我检查datfrozenxid它时,它约为 15 亿,而我的txid_current约为 700 亿。我觉得,它有很大的不同,有些东西是错误的。

下面的查询,我曾经看到datfrozenxidpg_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,,,,xidStopLimitxidWarnLimitxidVacLimit

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 …

postgresql transaction vacuum

2
推荐指数
1
解决办法
1834
查看次数

标签 统计

postgresql ×5

postgresql-9.1 ×4

blob ×2

copy ×1

pg-dump ×1

transaction ×1

vacuum ×1