postgresql — вопросы с ответами

PostgreSQL – это система управления реляционными базами данных корпоративного класса, наравне с лучшими проприетарными системами баз данных: Oracle, Microsoft SQL Server и IBM DB2. PostgreSQL уникален, потому что это не просто база данных, но еще и качественная платформа приложений.

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

PostgreSQL предлагает вам написать хранимые процедуры и функции на многочисленных языках программирования. Помимо готовых языков C, SQL и PL/pgSQL, вы можете легко включить поддержку дополнительных языков, таких как PL/Perl, PL/Python, PL/V8 (он же PL/JavaScript), PL/Ruby и PL/R. Такая поддержка широкого спектра языков позволяет вам выбирать язык с конструкциями, которые могут наилучшим образом решить имеющуюся проблему. Например, используйте R для статистики и построения графиков, Python для вызова веб-сервисов, библиотеку Python SciPy для научных вычислений и PL/V8 для проверки данных, обработки строк и обработки данных JSON. Еще проще: найдите необходимую вам свободно доступную функцию, узнайте язык, на котором она написана, включите этот конкретный язык в PostgreSQL и скопируйте код. От этого качество выполненной работы не пострадает.

Разнообразие типов

Большинство выпускаемых баз данных ограничивают вас предопределенным набором типов данных: целыми числами, текстами, логическими значениями и т. д. PostgreSQL не только поставляется с большим встроенным набором, чем большинство баз, но и имеет возможность установки дополнительных типов данных в соответствии с вашими потребностями. Нужны комплексные числа? Создайте составной тип, состоящий из двух чисел. Имеется треугольный фетиш? Создайте тип координат, затем создайте тип треугольника, состоящий из трех пар координат. Предпочитаете двенадцатеричную систему исчисления? Создайте свой собственный двенадцатеричный тип. Инновационные типы полезны, поскольку операторы и функции их поддерживают. Поэтому, как только вы создали свои специальные типы чисел, не забудьте определить для них основные арифметические операции. Да, PostgreSQL позволит вам настроить значение символов (+,-,/,*). Всякий раз, когда вы создаете новый тип, PostgreSQL автоматически создает для вас тип сопутствующего массива. Если вы создали тип комплексного числа, вам доступны массивы комплексных чисел без дополнительной работы.

PostgreSQL также автоматически создает типы из любых определенных вами таблиц. Например, создайте таблицу собак с такими столбцами, как порода, остроумие и громкость лая. За кулисами PostgreSQL поддерживает для вас тип данных dog. Этот удивительно полезный мост между реляционным миром и объектным миром означает, что вы можете обрабатывать элементы данных так, чтобы это было удобно для поставленной задачи. Вы можете создавать функции, которые работают с одним объектом одновременно, или функции, которые работают с наборами объектов одновременно. Многие сторонние расширения для PostgreSQL используют пользовательские типы для достижения прироста производительности, предоставляют доменные конструкции для более короткого и удобного в обслуживании кода и выполняют функции, о которых вы можете только мечтать с другими базами данных.

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

Недостатки

Типичный размер установленной PostgreSQL без каких-либо расширений составляет более 100 МБ. Это исключает PostgreSQL в качестве базы данных на небольшом устройстве или в качестве простого хранилища кеша. Существует множество облегченных баз данных, которые могли бы лучше удовлетворить ваши потребности без увеличения занимаемой площади.

Учитывая его корпоративный статус, PostgreSQL воспринимает безопасность слишком серьезно. Если вы разрабатываете легковесные приложения, в которых вы управляете безопасностью на уровне приложений, безопасность PostgreSQL с ее сложной ролью и управлением разрешениями может оказаться излишней. Так что в подобных случаях лучше обратиться к однопользовательской базе данных, такой ​​как SQLite. Также можно воспользоваться Firebird, которая может быть запущена как клиентский сервер или в однопользовательском встроенном режиме.

Все это говорит о том, что стандартной практикой для PostgreSQL является объединение с другими типами баз данных. Одна из распространенных комбинаций, которую вы найдете, – это использование Redis или Memcache для кэширования результатов запросов PostgreSQL. В качестве другого примера, SQLite можно использовать для хранения несвязанного набора данных для автономных запросов, когда PostgreSQL является основным сервером базы данных для приложения.

Наконец, многие хостинговые компании не предлагают PostgreSQL в среде общего хостинга или предлагают его устаревшую версию. Большинство команий все еще тяготеет к MySQL.

Файлы конфигурации

Операциями сервера PostgreSQL управляют три основных файла конфигурации:

  1. postgresql.conf. Управляет общими настройками, такими как распределение памяти, место хранения по умолчанию для новых баз данных, IP-адреса, которые прослушивает PostgreSQL, расположение журналов и многое другое.
  2. pg_hba.conf. Управляет доступом к серверу, определяя, какие пользователи могут входить в какие базы данных, какие IP-адреса могут подключаться и какую схему аутентификации принимать.
  3. pg_ident.conf. Если этот файл присутствует, он сопоставляет аутентифицированный логин ОС пользователю PostgreSQL. Люди иногда связывают корневую учетную запись ОС с учетной записью суперпользователя PostgresSQL, postgres.

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

Применение параметров конфигурации

Некоторые изменения конфигурации требуют перезапуска службы PostgreSQL, которая закрывает любые активные подключения от клиентов. Другие изменения требуют только перезагрузки. Новые пользователи, подключающиеся после перезагрузки, получат новые настройки. Существующие пользователи с активными подключениями не будут затронуты во время перезагрузки. Если вы не уверены, требует ли изменение конфигурации перезагрузки или перезапуска, обратитесь к контекстному параметру, связанному с конфигурацией. Если контекст является postmaster, вам потребуется перезапуск. Если контекст имеет статус user, будет достаточно и перезагрузки.

Перезагрузка

Перезагрузка может быть выполнена несколькими способами. Один из способов – открыть окно консоли и запустить эту команду:

Если у вас установлен PostgreSQL в качестве службы в RedHat Enterprise Linux, CentOS или Ubuntu, введите вместо этого:

postgresql-9.5 – это название вашего сервис (в более старых выпусках PostgreSQL сервис иногда называют postgresql без номера версии).

Вы также можете войти как суперпользователь в любую базу данных и выполнить следующий SQL:

Перезапуск

Более фундаментальные изменения конфигурации требуют перезапуска. Вы можете выполнить перезапуск, остановив и перезапустив службу postgres (daemon). Да, маневренный режим мощности тоже поможет.

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

Для любого экземпляра PostgreSQL, не установленного в качестве службы:

В Windows вы также можете просто нажать «Перезагрузить» в службе PostgreSQL в диспетчере служб.

Кастомизация psql

Разработчикам, которые часто имеют дело с psql, не лишним будет рассмотреть возможность адаптации среды psql для повышения производительности. Psql берет настройки из специального файла psqlrc, отвечающего за конфигурацию (если он есть). Когда запускается psql, он автоматически проводит поиск этого файла и инициирует все его команды.

В Linux/Unix этот файл обычно имеет название .psqlrc и должен быть помещен в ваш корневой каталог. В Windows же он имеет название psqlrc.conf и располагается на диске C, в папке Roaming. Не беспокойтесь, если сразу по завершению инсталяции не можете определить его местонахождение; вам обычно нужно его создать. Разнообразные команды в файле переопределяют дефолтные значения для psql.

Данный пример дает представление о файле psqlrc. Вы можете включить в него любую psql-команду.

Когда вы вновь запустите psql, результат выполнения файла конфигурации отразится на экране:

Какая-то часть команд доступна только в системах Linux/Unix, в то время как другие работают только в Windows. В любой из ОС вы должны использовать косую черту в стиле Linux/Unix (прямую косую черту) для обозначения пути. Если вы хотите обойти файл конфигурации и запустить psql со всеми его значениями по умолчанию, запустите его с опцией -X.

Вы можете изменять настройки на лету, пока находитесь в psql, хотя изменение вступит в силу только во время сеанса psql. Чтобы удалить переменную конфигурации или установить ее по умолчанию, введите команду unset, а затем настройку, например: unset qstat92.

При использовании set помните, что переменная, которую вы устанавливаете, чувствительна к регистру. Используйте все заглавные буквы, чтобы установить системные параметры, и строчные буквы для ваших собственных переменных. В позапрошлом примере PROMPT1 – это системный параметр для отображения приглашения ввода psql, тогда как qstats92 – это переменная, инициализированная как сокращение для отображения текущих действий на сервере PostgreSQL.

4 ответа
Я работаю над проектом Django с virtualenv и подключаю его к локальной базе данных postgres. когда я запускаю проект, говорит: ImportError: No module named psycopg2.extensions то я использовал эту команду для установки pip install psycopg2 то во время установки он дает следующую ошибку. Download...
31 янв. 2015, в 14:58
3 ответа
Когда я пытаюсь протестировать любое приложение с помощью команды (я заметил это, когда попытался развернуть myproject с использованием тэга, использующего эту команду): python manage.py test appname Я получаю эту ошибку: Creating test database for alias 'default'... Got an error creating the test ...
django-testing
06 янв. 2013, в 19:04
2 ответа
Какую вилку или комбинацию пакетов нужно использовать, чтобы PyPy, Django и PostgreSQL играли вместе? Я знаю, что PyPy и Django играют хорошо вместе, но я менее уверен в PyPy и PostgreSQL. Я вижу, что Алекс Гейнор сделал вилку PyPy под названием pypy-postgresql. Я также знаю, что некоторые люди испо...
psycopg2
pypy
19 фев. 2012, в 16:15
7 ответов
Каждый раз, когда вы настраиваете новую таблицу SQL или добавляете новый столбец varchar в существующую таблицу, мне интересно, что самое лучшее для length. Итак, скажем, у вас есть столбец с именем name типа varchar. Итак, вы должны выбрать длину. Я не могу придумать имя > 20 символов, но вы ник...
sql-server
28 нояб. 2011, в 10:52
5 ответов
OperationalError at /admin/ FATAL: Peer authentication failed for user "myuser" Это ошибка, которую я получаю, когда пытаюсь попасть на мой сайт администратора Django. Я не использовал MySQL. Я новичок в PostgreSQL, но решил переключиться, потому что хост, который я в конечном счете планирую испо...
17 нояб. 2011, в 13:40
13 ответов
У меня есть приложение rails, что базы данных находятся в SQLite (Dev и production). Поскольку я перехожу к heroku, я хочу преобразовать свою базу данных в PostgreSQL. В любом случае, я слышал, что локальная база разработки не нуждается в изменении от SQLite, поэтому мне не нужно ее менять, однако, ...
database
heroku
15 июль 2011, в 16:47
5 ответов
Я пытаюсь добавить уникальный индекс, который создается из внешних ключей из четырех связанных таблиц (пользователей, университетов, subject_names, subject_types): add_index :studies, ["user_id", "university_id", \ "subject_name_id", "subject_type_id"], :unique => true Ограни...
migration
indexing
26 март 2011, в 16:02
5 ответов
Я занимаюсь разработкой с использованием базы данных SQLITE с производством в POSTGRESQL. Я просто обновил свою локальную базу данных с огромным объемом данных и вам нужно перенести определенную таблицу в производственную базу данных. Основываясь на запуске sqlite database .dump > /the/path/to/sq...
database
migration
03 янв. 2011, в 02:54
13 ответов
Как следует из названия, я хотел бы выбрать первую строку каждого набора строк, сгруппированных с помощью GROUP BY. В частности, если у меня есть таблица purchases, которая выглядит так: SELECT * FROM purchases; Мой вывод: id | customer | total ---+----------+------ 1 | Joe | 5 2 | Sally ...
group-by
greatest-n-per-group
27 сен. 2010, в 01:33
13 ответов
У меня появилось много ошибок с сообщением: "DatabaseError: current transaction is aborted, commands ignored until end of transaction block" после изменения с python-psycopg на python-psycopg2 в качестве механизма базы данных проекта Django. Код остается тем же, просто не знаю, откуда эти ошибки....
psycopg2
psycopg
05 июнь 2010, в 07:04
1 ответ
Я пытаюсь найти способ связывать типы столбцов через наиболее используемые базы данных: MySQL, PostgreSQL и SQLite. Вот что я до сих пор, но я боюсь, что это не сделано, и мне нужны люди с большим опытом, чтобы помочь мне закончить любые отсутствующие типы. MySQL PostgreSQL ...
database
types
21 дек. 2009, в 21:15
27 ответов
Какие существуют хорошие ресурсы для понимания настройки базы данных для основных движков и продвижения ваших знаний в этой области? Идея этого вопроса состоит в том, чтобы собрать накладную нагрузку ресурсов, которые неизменно существуют, так что люди могут иметь "одну остановку" магазина знаний о ...
database
sql-server
17 апр. 2009, в 15:55
8 ответов
Я создаю сайт Django, и я ищу поисковую систему. Несколько кандидатов: Lucene/Lucene с компасом /Solr Sphinx Встроенный полнотекстовый поиск Postgresql Встроенный полнотекстовый поиск в MySQl Критерии выбора: актуальность и рейтинг результатов скорость поиска и индексирования простота исполь...
lucene
full-text-search
sphinx
10 апр. 2009, в 11:15
10 ответов
У меня есть следующая таблица счетчиков: CREATE TABLE cache ( key text PRIMARY KEY, generation int ); Я хотел бы увеличить один из счетчиков или установить его на ноль, если соответствующая строка еще не существует. Есть ли способ сделать это без проблем concurrency в стандартном SQL? Опера...
27 март 2009, в 17:52
27 ответов
Я заинтересован в изучении некоторых (идеально) баз данных агностических способов выбора n-й строки из таблицы базы данных. Было бы также интересно узнать, как это можно достичь, используя встроенную функциональность следующих баз данных: SQL Server MySQL PostgreSQL SQLite Oracle В SQL Server 2...
19 авг. 2008, в 17:16
Наверх
Меню