集群实现的性能改进给我留下了深刻的印象,但不知道它需要多长时间。
我知道如果在集群之后更改了表或分区,则需要重新构建集群,但是除非我记下了上次对表进行集群的时间,否则我怎么知道什么时候需要再次进行集群?
我可以使用这个查询来告诉我哪些表有一个或多个聚集索引
SELECT *
FROM pg_class c
JOIN pg_index i ON i.indrelid = c.oid
WHERE relkind = 'r' AND relhasindex AND i.indisclustered
Run Code Online (Sandbox Code Playgroud)
我的问题是。
我注意到重新构建聚集索引所需的时间与最初构建它所需的时间一样长(即使在此期间没有触及表)。所以我想避免重新聚类,除非我知道表需要它。
更新为清晰(我希望)
如果我使用这个命令......
CLUSTER tableA USING tableA_idx1;
Run Code Online (Sandbox Code Playgroud)
我正在使用 Windows 批处理文件通过 psql 连接到 postgres。我发出这样的命令......
SET PGPASSWORD=postgres
psql -U postgres -d postgres -c "DROP USER IF EXISTS foo;"
Run Code Online (Sandbox Code Playgroud)
这对于针对数据库运行一个简短的 SQL 命令非常有效。但我遇到了两个相关问题
示例1......
psql -U postgres -d postgres -c "CREATE DATABASE foo
WITH OWNER = bar
ENCODING = 'UTF8'
TABLESPACE = mytabspace;"
Run Code Online (Sandbox Code Playgroud)
示例2......
psql -U postgres -d postgres -c "
ALTER TABLE one ALTER COLUMN X TYPE INTEGER;
ALTER TABLE two ALTER COLUMN Y TYPE INTEGER;"
Run Code Online (Sandbox Code Playgroud)
这些都不会如图所示工作,我做了一些谷歌搜索,发现了一些使用 linux 执行此操作的建议,并尝试了各种克拉、反斜杠和下划线,但似乎无法跨行分割命令。
我知道运行文件的 -f 选项,但我试图避免这种情况。
有什么建议么?
我有一个 powershell 进程,它从远程服务器读取记录并将其复制到本地数据库中。运行时,可能会运行 8-12 小时。
如何防止计算机在此期间关闭(或进入睡眠/休眠模式)?我知道我可以调整“电源和睡眠设置”以将计算机设置为从不睡眠,但这不是我想要的 - 我确实希望它在进程不睡眠时进入睡眠状态。
我知道如果 netflix 或 youtube 视频正在运行,睡眠/休眠会被暂停,我希望计算机在 powershell 进程运行时执行相同的操作。
powershell 进程在桌面上的命令窗口中运行 - 我很高兴屏幕保护程序能够激活,但我不希望发生的是我在 8 小时后唤醒机器并发现该进程只运行了电脑进入睡眠状态前10分钟!