升级 Postgres的标准程序似乎要求我临时运行旧版本和新版本。这意味着我必须更改旧版本的端口。
考虑到我如何pg_upgrade
准确地告诉在哪里可以找到数据目录,这似乎完全没有必要,它可以直接读取所有数据。
这真的是升级的唯一方法(除了转储/恢复),还是我误解了什么?难道我不能只要求升级者直接转换所有二进制数据文件,而不用弄乱用户、密码和端口吗?
我有一个非常大的查询,它的运行速度比我想象的要慢,但是对查询执行计划的深入研究并没有帮助揭示这种缓慢。最终我缩小了范围:try_parse
是罪魁祸首!
正常查询:
SELECT CloseDate
FROM MyTable
(4959 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 17 ms.
Run Code Online (Sandbox Code Playgroud)
使用 try_parse:
SELECT try_parse(CloseDate as datetime using 'en-us')
FROM MyTable
(4959 row(s) affected)
SQL Server Execution Times:
CPU time = 719 ms, elapsed time = 718 ms.
Run Code Online (Sandbox Code Playgroud)
后一种情况下的执行计划看起来很无辜:
有没有什么方法可以让我以后更容易地发现罪魁祸首?缓慢的实际来源完全隐藏在视线之外。
这个数据库有一个持久化的计算列,它是通过调用一个 .NET 函数来计算的。在将兼容性从 MSSQL 2005 更改为 2012 时,出现错误 10334,这看起来更像是警告:它告诉我必须将其中一个表标记为 has_unchecked_assembly_data。
它没有告诉我该怎么做。我应该保持原样吗?我应该以某种方式强制重新计算列吗?如何?
alter assembly unchecked data 的文档列出了造成这种情况的几个原因,我认为 #1 是唯一适用于该数据库的原因。它也没有解释如何取消标记这些列。