Что такое PostgreSQL?

Часто Задаваемые Вопросы

PostgreSQL — это кроссплатформенная объектно-реляционная СУБД с открытым исходным кодом. Из этой статьи вы узнаете, как установить PostgreSQL в Ubuntu Linux, подключиться к нему и выполнить пару простых SQL-запросов, а также о том, как настроить резервное копирование.

Чтобы установить PostgreSQL 9.2 в Ubuntu 12.10, выполните следующие команды:

sudo apt-add-repository ppa:pitti/postgresql
sudoapt-get update
sudoapt-get install postgresql-9.2

Дополнение: Для других версий PostgreSQL, версий Ubuntu, а также других дистрибутивов Linux, последовательность шагов аналогичная. Только вместо приведенного PPA я бы все же рекомендовал использовать официальные репозитории пакетов, приведенные на postgresql.org.

Также вас могут заинтересовать заметки Потоковая репликация в PostgreSQL и пример фейловера, Некоторые интересные отличия PostgreSQL от MySQL и Как спроектировать схему базы данных.

Попробуем поработать с СУБД через оболочку:

sudo-u postgres psql

Создадим тестовую базу данных и тестового пользователя:

CREATEDATABASE test_database;
CREATEUSER test_user WITH password ‘qwerty’;
GRANTALLONDATABASE test_database TO test_user;

Для выхода из оболочки введите команду .

Теперь попробуем поработать с созданной базой данных от имени test_user:

psql -h localhost test_database test_user

Создадим новую таблицу:

CREATESEQUENCE user_ids;
CREATETABLE users (
  id INTEGERPRIMARYKEYDEFAULTNEXTVAL(’user_ids’),
  login CHAR(64),
  password CHAR(64));

Обратите внимание, что в отличие от некоторых других СУБД, в PostgreSQL нет столбцов со свойством auto_increment. Вместо этого в постгресе используются последовательности (sequences). На данный момент достаточно знать, что с помощью функции nextval мы можем получать уникальные числа для заданной последовательности:

SELECTNEXTVAL(’user_ids’);

Прописав в качестве значения по умолчанию для поля id таблицы users значение , мы добились того же эффекта, что дает auto_increment. При добавлении новых записей в таблицу мы можем не указывать id, потому что уникальный id будет сгенерирован автоматически. Несколько таблиц могут использовать одну и ту же последовательность. Таким образом мы сможем гарантировать, что значения некоторых полей у этих таблиц не пересекаются. В этом смысле последовательности более гибки, чем auto_increment.

Точно такую же таблицу можно создать и при помощи всего лишь одной команды:

CREATETABLE users2 (
  id SERIALPRIMARYKEY,
  login CHAR(64),
  password CHAR(64));

В этом случае последовательность для поля id создается автоматически.

Теперь с помощью команды можно ознакомиться со списком всех доступных таблиц, а с помощью — увидеть описание таблицы users. Если вы не получили интересующую вас информацию, попробуйте вместо . Список баз данных можно получить командой , а переключиться на конкретную БД — командой . Для отображения справки по командам скажите .

Важно отметить, что в PostgreSQL по умолчанию имена таблиц и столбцов приводятся к нижнему регистру. Если это поведение нежелательно, можно воспользоваться двойными кавычками:

CREATETABLE"anotherTable"("someValue"VARCHAR(64));

Еще одна особенность PostgreSQL, с которой могут возникнуть сложности в начале работы с этой СУБД — так называемые «схемы». Схема представляет собой что-то вроде пространства имен для таблиц, как бы каталог с таблицами внутри базы данных.

Создание схемы:

CREATESCHEMA bookings;

Переключение на схему:

SET search_path TO bookings;

Просмотреть список существующих схем можно командой . По умолчанию используется схема с именем public. В принципе, можно успешно использовать PostgreSQL, и не зная про существование схем. Но при работе с унаследованным кодом, а также в некоторых граничных случаях, знание о схемах может очень пригодиться.

В остальном работа с PostgreSQL мало чем отличается от работы с любой другой реляционной СУБД:

INSERTINTO users (login, password)
  VALUES(’afiskon’,’123456’);
SELECT*FROM users;

Если сейчас вы попытаетесь подключиться к постгресу с другой машины, то потерпите неудачу:

psql -h 192.168.0.1 test_database test_user

psql: could not connect to server: Connection refused
  Is the server running on host "192.168.0.1" and accepting
  TCP/IP connections on port 5432?

Чтобы исправить это, добавьте строку:

listen_addresses = ‘localhost,192.168.0.1’

… в файл /etc/postgresql/9.2/main/postgresql.conf, а также:

host    all    all    192.168.0.1/16    md5

… в файл /etc/postgresql/9.2/main/pg_hba.conf и скажите:

sudo service postgresql restart

Теперь все должно работать.

Резервное копирование в PostgreSQL выглядит примерно так:

pg_dump -c-h 192.168.0.1 -U test_user test_database > ./dump.sql

Если у вас большая база данных, обратите также внимание на поддержку утилитой pg_dump флага -Fc.

Восстановление из резервной копии:

cat dump.sql | psql -h 192.168.0.1 test_database test_user

Во время создания резервной копии вы можете получить ошибку вроде такой:

pg_dump: server version: 9.2.4; pg_dump version: 9.1.9
pg_dump: aborting because of server version mismatch

Насколько мне известно, единственное нормальное решение этой проблемы — честно держать всюду одну и ту же версию PostgreSQL.

Учтите, что настройки PostgreSQL по умолчанию предполагают, что вы пытаетесь запустить его на микроволновке. Перед использованием PostgreSQL в боевых условиях эти настройки обязательно нужно изменить под ваше железо и ваше приложение. Для быстрой настройки можно воспользоваться онлайн-приложениями Cybertec PostgreSQL Configurator или PgTune. Также есть консольная утилита pgtune. Генерируемый этими решениями конфиг будет далек от оптимального для конкретного приложения, но существенно лучше дэфолтного. Также заметьте, что во многих реальных инсталляциях используется PgBouncer.

Метки: Linux, PostgreSQL, СУБД.

Данная книга является официальной документацией по PostgreSQL. Она была написана разработчиками PostgreSQL и другими добровольцами, работавшими в смежных с разработкой PostgreSQL областях. Книга описывает всю функциональность, которую официально поддерживает текущая версия PostgreSQL.

Чтобы упорядочить большое количество информации о PostgreSQL, данная книга была разбита на несколько разных частей. Каждая часть предназначается отдельному классу пользователей или пользователям на разных стадиях освоения PostgreSQL:

  • Part I является информативным введением для новых пользователей.

  • Part II документы касающиеся языка запросов и его окружения, включая типы данных и функции, а также настройки производительности на уровне пользователя. Каждый пользователь PostgreSQL должен прочесть эту часть.

  • Part III описывает установку и администрирование сервера.

    PostgreSQL: вчера, сегодня, завтра

    Любой, кто запускает сервер PostgreSQL, для личных нужд или для других пользователей должен прочесть эту часть.

  • Part IV описывает программный интерфейс для клиентских программ PostgreSQL.

  • Part V содержит информацию для продвинутых пользователей о расширенных возможностях сервера. В этой части рассказывается, например, про типы данных и функции, определяемые пользователем.

  • Part VI содержит ссылочную информацию о синтаксисе команд SQL, клиенской и серверной программах. Данная часть поддерживает другие части с помощью структурированной по командам и программам информации.

  • Part VII содержит некий ассортимент информации, которая может быть использована разработчиками PostgreSQL.

  • Что такое PostgreSQL?

    PostgreSQL — это объектно-реляционная система управления базами данных () (по-русски ОРСУБД или просто СУБД) основанная на POSTGRES, версии 4.2, которая была разработана в Научном Компьютерном Департаменте Беркли Калифорнийского Университета. POSTGRES является пионером во многих аспектах, которые стали доступны в некоторых коммерческих СУБД много позже.

    PostgreSQL — это продукт с открытым исходным кодом, который является потомком оригинального кода, написанного в Беркли. PostgreSQL поддерживает большую часть стандарта SQL:2003 и предлагает множество современных возможностей:

    • комплексные запросы
    • внешние ключи
    • триггеры
    • представления (views)
    • транзакционная целостность
    • многоверсионное управление параллельным доступом

    Также, возможности PostgreSQL могут быть расширены пользователем путём добавления новых

    • типов данных
    • функций
    • операторов
    • агрегатных функций
    • индексных методов
    • процедурных языков

    Поскольку СУБД PostgreSQL выпускается под либеральной лицензией, её можно бесплатно использовать, модифицировать и распространять для любых целей, включая личные, коммерческие или академические.

    Хорошо, изначально это была просто шутка, которую мы имели с моим другом, но это оказалось интересным техническим вопросом:)

    У меня есть следующая таблица :

    В таблице содержатся записи для всех моих материалов с соответствующим объемом и приоритетом (насколько мне это нужно).

    У меня есть сумка с указанным объемом, скажем .

    Что такое Postgres

    Я хочу выбрать из таблицы все, что я могу положить в сумку, сначала упаковывая самые важные вещи.

    Это похоже на случай использования оконных функций, поэтому вот запрос, который я придумал:

    Проблема с этим, однако, заключается в том, что Postgres жалуется:

    Если я удалю этот фильтр, итоговый столбец будет правильно рассчитан, результаты будут правильно отсортированы, но все элементы будут выбраны, а это не то, что я хочу.

    Итак, как мне это сделать? Как выбрать только элементы, которые могут помещаться в сумку?

    sqlpostgresqlwindow-functions

    задан Maxim Sloyko 18 февр. '11 в 17:33

    источникподелиться

    Добавить комментарий

    Закрыть меню