2009-06-04 45 views
5

我正在考虑转换(主要是因为更宽松的许可证),并且倾向于听到很多互联网对Postgres比MySQL好多少抱怨,但没有多少细节。你在Postgres做什么让你更有效率,或者你觉得优雅?已经完成了MySQL切换的Web开发人员,您现在可以做些什么postgresql功能?

它没有被看中,例如一些自己喜欢的事情有关MySQL包括

  • 易主键与自动增量递增(无需编写生成器为每个表似乎更痛苦比它应该是这样一个共同的要求),
  • “LIMIT,OFFSET”语句(既可以方便地分页)
  • ON DUPLICATE KEY UPDATE(使得插入/更新“多对多”的表快速,无痛)
+0

我还没有使用过Postgres,但是最近几年我一直在使用MySQL。你是对的,在MySQL中使用AUTOINCREMENT是非常痛苦的,必须为每个表单独创建序列,然后插入seq.nextval而不是简单地使用NULL来插入和增加索引,这是一个巨大的痛苦! – 2009-06-04 15:42:56

+4

确实你没有使用过Postgres。有一种称为“SERIAL”的伪类型/语法糖,与AUTO_INCREMENT一样易于使用。 – 2009-06-04 16:12:20

回答

4

PostgreSQL最有用的功能(这MySQL缺乏),在我看来,主要有:

  • generate_series并在LIMITOFFSET条款
  • 自定义使用相关值一般
  • 能力设定恢复功能聚集
  • DISTINCT ON子句
  • 更高级JOIN方法(MERGE JOIN一个d HASH JOIN

你可以与他们创造奇迹。

PostgreSQL代码也往往看起来更优雅(注意,“看起来”不等于“执行”),因为你可以用漂亮的铸造语法(::),漂亮的RECORD类型和这些类型的东西。

缺点是:

  • 不能使用提示(我知道这是故意的,我知道他们应尽量避免;去downvote我)
  • 你不能没有访问服务器配置文件使用会话变量(你需要设置custom_variable_classes
  • DISTINCTGROUP BY操作是滞后的。

由于这两个系统功能相当强大且发展良好,它们主要在这些花哨功能(大多数开发人员甚至从不使用)上有所不同。

对于基本的SQL,它们都很好。

+1

MySQL支持用C语言编写的自定义聚合函数.SQL会更好。 – 2009-06-05 11:48:33

+0

@Andrew:当然,但将它们安装在共享主机上或在源代码分布式Web应用程序中使用是一种痛苦。不过,尼斯点。 – Quassnoi 2009-06-05 11:52:14

3
  • 交易DDL - 你可以做"start transaction; delete table foo; rollback;"foo仍然会在那里。
0

PostgreSQL通过PostGIS为地理空间运营商提供了非常丰富的支持。很难想象与任何其他数据库进行任何类型的Google地图集成(或类似的地理空间工作)。在Perl

0
  • 存储过程/ UDF的放在libpq
  • 架构和数据库,而不是数据库故作模式
  • GIN和GIST
0

添加检查领域

  • 异步数据库访问。例如:

    CREATE TABLE "FILES" (
        ... 
        md5checksum text NOT NULL, 
        CONSTRAINT "FILES_md5checksum_check" CHECK ((md5checksum ~* '^[a-f0-9]{32}$'::text)), 
        ... 
    ); 
    

    md5checksum场现在总是有效的,它的十六进制字符串,它的长32个字符。

  • 相关问题