你好,
我看到实际数据库大小(在HDD上和通过pg_database_size()调用显示)和大小之间存在很大差异,通过总结检索到的总关系大小来计算pg_total_relation_size().
第一个是62G,最后一个是16G(右边是最大表中已删除数据的差异)
这是一个简化的查询,可以显示我的系统上的差异:
select current_database(),
pg_size_pretty( sum(total_relation_raw_size)::bigint ) as calculated_database_size,
pg_size_pretty( pg_database_size(current_database()) ) as database_size
from (select pg_total_relation_size(relid) as total_relation_raw_size
from pg_stat_all_tables -- this includes also system tables shared between databases
where schemaname != 'pg_toast'
) as stats;
Run Code Online (Sandbox Code Playgroud)
似乎那里有一些悬空数据.出现这种情况后,我们从该数据库中转储并完全抽空了大量未使用的数据.
PS:我想,这是某种类型的数据库损坏......从这种情况中恢复的唯一方法是切换到热备数据库......
我正在尝试为 PostgreSQL SQL 定义词法分析器规则。
问题在于运算符定义和行注释相互冲突。
例如@---是一个操作符标记@-后跟--注释而不是一个操作符标记@---
在grako有可能定义为负先行-样片段:
OP_MINUS: '-' ! ( '-' ) .
Run Code Online (Sandbox Code Playgroud)
在 ANTLR4 中,我找不到任何方法来回滚已经消耗的片段。
有任何想法吗?
这里的原始定义是什么 PostgreSQL 操作符可以是:
The operator name is a sequence of up to NAMEDATALEN-1
(63 by default) characters from the following list:
+ - * / < > = ~ ! @ # % ^ & | ` ?
There are a few restrictions on your choice of name:
-- and /* …Run Code Online (Sandbox Code Playgroud)