PostgreSQL可以对大多数迁移类型查询执行幂等运算。例如CREATE TABLE IF NOT EXISTS "foo"
或CREATE OR REPLACE FUNCTION "bar"()
等。使用这些类型的查询而不是检查每个增量迁移文件是否已运行的更传统的迁移表会对性能产生什么影响?
liquidate
,flyweight
之类的迁移工具具有检查对象是否存在的能力,如果找不到该对象,则可以创建该对象。出于性能原因,应以这种方式编写迁移脚本。一旦可以使迁移工具调用等幂对象创建脚本,该脚本使用如您所述的'REATE TABLE IF NOT EXISTS "foo"
之类的语法。因此,从性能的角度来看,这必须以一种或另一种方式完成。
迁移工具提供了一些其他好处,例如-您实际上可以在运行脚本之前添加任何前提条件。该前提条件可以与SQL在您拥有的所有对象上提供的条件一样广泛。它提供了版本控制机制,因为脚本是逐个发布地运行,所以可以累积并运行那些脚本以重新创建数据库。如您所述,使用可靠的前提条件和幂等脚本编写这些脚本时,它们不会很慢。
总之,我将同时使用-带前提条件的迁移脚本和等幂语法。