【问题标题】:Moving from mysql to postgresql, best features I was missing?从 mysql 迁移到 postgresql,我缺少的最佳功能?
【发布时间】:2011-02-17 00:21:09
【问题描述】:

我以前都是用mysql开发的,这周出现了用postgresql工作的机会,何乐而不为!

我总是被告知 postgresql 有一个更大的功能集。
我阅读了一些维基,但大多数信息都已经过时了。

我缺少哪些最好的功能?像部分索引等。
另外,我会错过mysql的一些东西吗?

【问题讨论】:

    标签: sql mysql postgresql


    【解决方案1】:

    【讨论】:

    • 如果你能谈谈你为什么喜欢“表达式索引”、“用户定义的聚合”、“更丰富的数据类型”、“数组支持”等,那将是非常好的/有帮助的。 . 以及您过去是如何使用这些的
    • 在对 PK 进行分组时,我不喜欢函数依赖。MySQL 有一个类似的特性,我希望没有数据库供应商实现它。最好明确说明它是如何选择另一个的Group By 子句中未引用的字段,即使 Group By 列是 PK。
    • @Thomas:MySQL 不检查任何内容,这与对主键的功能依赖不同。只需下载 9.1 的 alfa 版本,看看这两种实现之间的区别。
    • @MichaelBuen:优秀的名单!您可以添加 DOMAINs ;非常有用的 wrt 约束最小化。 (和标准,而不是 UDT)
    • 将 LATERAL JOIN 添加到列表中。
    【解决方案2】:

    别忘了 DDL,它也是交易安全的:

    BEGIN;
      ALTER TABLE foo DROP COLUMN bar;
      ALTER TABLE foo ADD COLUMN baz INET;
    COMMIT;
    

    非常适合维护工作,即使您失去数据库连接或服务器出现故障,您也将始终拥有一致的数据库。

    【讨论】:

      【解决方案3】:

      除了迈克尔的列表(其中我最喜欢窗口函数)

      • 检查约束
      • 表函数(可以像这样使用的函数select * from my_func(42)
      • 部分索引 (CREATE INDEX idx1 ON some_table (some_column) WHERE some_flag = true)
      • 除以零是错误的
      • delete from some_table where 42 被视为错误,不会删除整个表
      • 您可以在 UPDATE 或 DELETE 中有一个子查询,该子查询从您正在更新的同一个表中进行选择
      • 更智能的查询优化器
      • 可延迟约束(很少使用,但当您需要它们时,它们真的很有帮助)
      • 外键是针对整个语句而不是逐行评估的
      • 事务表的全文搜索和空间扩展
      • 除了

      【讨论】:

      • 检查约束非常有用。我认为 MINUS 在 oracle 中,在 postgresql 中除外。
      • @Arthur:谢谢,你是对的。 EXCEPT 是标准,这就是 PG 使用的。
      【解决方案4】:

      以下链接列出了许多主要数据库产品之间的功能差异:

      Comparison of different SQL implementations

      【讨论】:

        【解决方案5】:

        完全外连接。缺少这些是我对 MySQL 最大的抱怨之一。但是 Postgresql 支持它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-05
          • 1970-01-01
          • 2011-06-13
          • 2010-09-06
          • 1970-01-01
          • 1970-01-01
          • 2020-09-09
          • 1970-01-01
          相关资源
          最近更新 更多