我写了一个脚本来REINDEX索引数据库中的索引。这是其中之一:
echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
问题是我无法在独立模式下运行此脚本。psql每次运行都提示输入密码。还有两个限制:
我无法在没有密码的数据库上创建用户。
因为REINDEX锁表,我应该sleep <num>在每个REINDEX.
有没有自动解决方案?
n_live_tupand n_dead_tupin pg_stat_user_tablesor是什么意思pgstattuple?
我对 PostgreSQL 中的表空间感到困惑。是不是类似于 LVM?我的意思是当磁盘已满时,我们可以添加另一个磁盘,然后格式化CREATE TABLESPACE tblspace LOCATION /media/disk2/data吗?够了吗?或者我们应该手动使用ALTER数据库、表或索引来利用它?
fsync和 和有synchronous_commit什么区别?我阅读了文档,我唯一理解的是他们都试图将更新物理写入磁盘。
我想在 bash 中使用 psql 返回的值。这是脚本:
psql "connection parameters" -c "SELECT pg_database_size('dbname');"
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
pg_database_size
------------------
5773072
(1 row)
Run Code Online (Sandbox Code Playgroud)
但我只想要这样5773072我就可以在日志记录中使用它。有人可以帮忙吗?
我写了一个脚本来备份 postgresql COPY,然后删除这些记录。pg_relation_size删除前后我都用过。
但两者都pg_relation_size显示相同的结果。这是否意味着VACUUM ANALYZE没有帮助?