PostgreSQL:依赖默认约束名称有多安全?

时间:2015-08-19 07:44:04

标签: sql postgresql documentation constraints naming-conventions

PostgreSQL提供了在CREATE TABLEALTER TABLE等语句中神奇地生成约束名称的能力,如果没有明确提供的话。命名约定是well known,我个人非常喜欢它。但它有多稳定和官方?它是否可以依赖于不同的主要版本甚至是未来50年?

我总觉得这是一个实现细节,虽然很多人依赖它,但是不应该总是使用显式名称来正确记录事物。我想我过去在官方文档中读过类似的内容,但是再也找不到了......

那么,这个命名方案是否可靠,或者用户是否应该总是尝试提供明确的名称,那么是否存在明确的官方声明?

1 个答案:

答案 0 :(得分:2)

严格地说,如果它不在文档中,你就不应该依赖它。

The docs只说:

  

如果您没有以这种方式指定约束名称,系统会为您选择一个名称。

如此严格我应该建议不要将约束名称烘焙到应用程序中,除非您在SQL中明确指定它们。这也会在读取SQL时使连接更加明显 - 您出于原因而烦恼指定约束名称。

也就是说,约束名称生成没有改变AFAIK,至少从我开始使用7.4左右的Pg开始。因此,虽然它不是官方文档API的一部分,但依赖它可能也不是特别糟糕。此外,约束名称始终由pg_dumppg_upgrade保留,因此除非您正在对已更改默认约束名称的新版本进行干净重新加载,否则它可能并不重要代。

TL; DR:看起来他们没有正式定义和记录,但他们不太可能改变,如果他们这样做,影响很小。所以依靠它们可能就行了。只需在应用程序中记录即可。