---
title: Введение в Postgre
date: 2007-04-16T10:00
tags: [backend, db]
---

[PostgreSQL](http://en.wikipedia.org/wiki/Postgre) - крутая СУБД, потому что..

1. Она не принадлежит какой-либо компании, как например Oracle или mysql и распространяется по BSD-лицензии
2. Имеет поддержку продвинутых фишек - PL/pgSQL, триггеров. Теоретически это очень полезно при создании очень масштабной системы.  
    
3. Транзакции по принципам ACID придают скорости - несколько запросов в одной транзакции выполняются как одна атомарная операция. А мультиверсионность помогает избежать блокировки таблиц.  
    
4. Объектность. Таблица выступает фактически в виде класса, а ряды - в виде объектов, так же как классы могут наследоваться, так и таблицы могут наследоваться.
5. Система привилегий операций с таблицами, схожа с системой по принципу с Oracle.
6. Репликации, т.е. использование нескольких серверов даёт масштабируемость.

Переход на PostgreSQL как правило связан с обработкой больших объемов данных - когда число рядов переваливает миллион, то mysql начинает испытывать трудности, а [Natural Join](http://en.wikipedia.org/wiki/Join_(SQL)) нескольких таких таблиц может привести вообще к падению сервера. Да и [тесты на параллельность](http://tweakers.net/reviews/657/6) поддерживают Postgre. Энтузиастам может быть интересна же не столь масштабируемость, сколько объектность, позволяющая большую свободу, или если хотите - сложность, по сравнению с mysql.

При переходе из mysql, следует отметить различия, которые естественно следует предусмотреть:

- Различные [типы данных](http://www.postgresql.org/docs/7.4/interactive/datatype.html). Нет datetime, зато есть возможность создать тучу своих типов.
- Отсутсвие _autoincrement_. Такая функция заменена наличием **sequence**, и в [упрощённом виде](http://phpclub.ru/faq/wakka.php?wakka=PostgresMigrationMysqlAutoincrement) может использоваться так:  
    `CREATE TABLE mynewtable (   id SERIAL   }   `
- pgAdmin III очень удобная консольная программа, а в качестве замены [phpMyAdmin](http://www.phpmyadmin.net/) есть [phpPgAdmin](http://phppgadmin.sourceforge.net/)
- Аналогом DATE_FORMAT является [to_char](http://www.postgresql.org/docs/current/interactive/functions-formatting.html)
- Заглавные буквы в названиях таблиц и полей [по умолчанию переводятся](http://archives.postgresql.org/pgsql-bugs/2006-11/msg00146.php) в нижний регистр, это можно обойти используя двойные кавычки
- Форматом для LIMIT конструкции стал также поддерживаемый с mysql 4`LIMIT # OFFSET #`
- Просмотр запущенных процессов реализуется аналогом  
    `--show processlisе``SELECT * from pg_stat_activity ;`

Читайте также:

- [Субъективная разница Postgre и MySQL  
    ](http://valera.ws/2007.09.04~postgresql-vs-mysql/)
- [Замена SQL_CALC_FOUND_ROWS](http://valera.ws/2008.07.24~calc-found-rows-in-postgresql/) из MySQL в Postgre

## Related

- [Экспорт данных используя Create View и Aggregate-функции](/ru/blog/tech/backend/DB/postgres/eksport-dannyh-ispolzuya-create-view-i-aggregate-funktsii/)
- [Alter sequence](/ru/blog/tech/backend/DB/postgres/alter-sequence/)
- [Amazon S3 direct upload](/ru/blog/tech/backend/amazon-s3-direct-upload/)
