Подключение

#MySQL

mysql -h 127.0.0.1 -u root -p

#PostgreSQL

psql -h 127.0.0.1 -U postgres

Типы данных

#MySQL

TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
FLOAT, DOUBLE, DECIMAL
CHAR, VARCHAR
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT
TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB
DATE, DATETIME, TIMESTAMP, TIME, YEAR
JSON
ENUM, SET

#PostgreSQL

  • В PostgreSQL нет TINYINT и MEDIUMINT, и нет unsigned-типов.
  • В отличие от MySQL, в PostgreSQL TEXT ≈ VARCHAR без лимита и без performance-разницы.
  • В PostgreSQL нет BLOB-типов как в MySQL (BYTEA хранит бинарные данные напрямую).
  • В PostgreSQL нет типа YEAR. TIMESTAMP не имеет проблемы 2038 года.
SMALLINT, INTEGER, BIGINT
REAL, DOUBLE PRECISION, NUMERIC
CHAR, VARCHAR, TEXT
BYTEA
DATE, TIME, TIMESTAMP, TIMESTAMPTZ, INTERVAL
BOOLEAN
JSON, JSONB, XML
UUID
ENUM, ARRAY
  • MySQL: проще, меньше типов, слабее контроль
  • PostgreSQL: строгая типизация, больше типов

Регистрозависимость

#MySQL

Имена столбцов по умолчанию нечувствительны к регистру - столбцы Name и NAME считаются одинаковыми. Имена столбцов, содержащие пробелы или совпадающие с ключевыми словами, заключаются в обратные кавычки (`), например: `User name`.

#PostgreSQL

Регистрозависимость действует с оговорками. Если имя столбца указано без двойных кавычек, то Name и NAME считаются одним и тем же именем, так как PostgreSQL автоматически приводит такие идентификаторы к нижнему регистру. Если же имя указано в двойных кавычках, то "Name" и "NAME" считаются разными столбцами. Для составных имён и имён, совпадающих с ключевыми словами, также используются двойные кавычки, например: "User name".


Ограничения (Constraints)

#MySQL

Ограничения используются для обеспечения целостности данных и могут задаваться как на уровне столбцов, так и на уровне таблиц. Поддерживаются основные типы ограничений: PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK (полноценно - начиная с MySQL 8.0.16) и NOT NULL; при этом имена ограничений не обязательны и часто генерируются автоматически.

#PostgreSQL

Ограничения являются полноценной частью модели данных и строго контролируются системой. Поддерживаются все основные типы ограничений (PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK, NOT NULL), при этом ограничениям рекомендуется явно задавать имена, так как они активно используются в сообщениях об ошибках и при дальнейшем сопровождении схемы.


 

test


Source: Orkhan Alishov's notes