Статьи

Используйте PostgreSQL и PHP на Windows

Я предполагаю, что каждый посетитель SitePoint видел слова «Веб-сайт, управляемый базой данных, используя PHP и MySQL» миллион раз. То, что вы не видите каждый день, это комбинация «PHP и PostgreSQL» — особенно не с пост-скриптом «… в Windows».

Некоторые люди думают, что запустить PostgreSQL в Windows невероятно сложно, потому что нет простого в использовании установщика Win32 (на момент написания 7.3.4. Была последней версией). Пользователи должны сначала установить своего рода эмулятор Unix и запустить систему баз данных на этой «платформе».

На сайте технической документации PostgreSQL говорится: «Основной план проекта PostgreSQL — добавить поддержку родной версии Windows с нашим выпуском 7.4. Вероятно, он будет выпущен в середине 2003 года…» Я еще не видел этот выпуск… возможно, поздно 2003? Однако это означает, что в будущем PostgreSQL станет еще более привлекательным выбором, чем MySQL!

Создать веб-сайт, управляемый базой данных, с помощью PostgreSQL? Зачем ты это делаешь? Разве не правило, что если вы используете PHP, ваша база данных — MySQL — точка !?

Ну, в моем случае, это было до тех пор, пока мне не было поручено преобразовать решение ASP / MSSQL в PHP / PostgreSQL. Причины перемен?

  1. мы (цедент) больше не хотели использовать продукты Microsoft (из-за связанных с этим затрат на лицензирование)
  2. мы хотели, чтобы функции базы данных отсутствовали в MySQL (внешние ключи и т. д.)

Мне также показалось, что было бы неплохо установить как старый ASP, так и новый PHP на одной машине разработки (Windows), когда мы выполняли этот «перевод». Еще одна веская причина попробовать комбинацию Windows, PostgreSQL и PHP в том, что всегда интересно найти ответ на этот давний вопрос: «Насколько это может быть сложно?»

Я должен заранее признать, что я разработчик Microsoft. В первую очередь я использую MSSQL, реже MySQL и почти никогда не использую PostgreSQL. То же самое было и с операционными системами; 90% времени я использовал Windows, 10% Linux. Несмотря на эти факты, мой переход на PostgreSQL благополучно закончился. И если это было выполнимо для меня, то и для вас тоже.

Для получения дополнительной информации об альтернативах MySQL см. Статью Уэйна Люка « Выход за пределы MySQL — решения для баз данных высокого уровня» .

Обратите внимание, что в этом руководстве предполагается, что вы прочитали первую главу превосходного веб-сайта Кевина Янка «Создайте свой собственный сайт, управляемый базой данных с использованием PHP и MySQL», или какое-то другое руководство, в котором объясняется, как установить Apache и PHP в Windows. Что еще более важно, я предполагаю, что после изучения этого процесса вы успешно установили веб-сервер с PHP-плагином.

Давайте начнем!

Установка Cygwin

Первая задача — загрузить и установить Cygwin , которая представляет собой Linux-подобную среду для Windows. На момент написания статьи последняя версия Cygwin — 1.5.5. Неплохая идея переименовать setup.exe в cygwin_setup.exe — таким образом, файл будет легче найти, если вы захотите позже добавить / удалить / обновить компоненты Cygwin.
Естественно, вы должны войти в систему как пользователь, принадлежащий к группе администраторов при запуске программы установки.

Программа установки Cygwin Net Release задаст вам следующие восемь вопросов:

  1. Отключить антивирусный сканер?
    Поскольку некоторые антивирусные программы могут вызывать проблемы во время установки Cygwin, у вас есть возможность временно отключить антивирусный сканер. В большинстве случаев работает опция по умолчанию Оставить вирусный сканер в покое. (Если антивирусная программа не обнаружена, то рано или поздно вы столкнетесь с проблемой другого типа…)
  2. Выберите тип установки
    Выберите Установить из Интернета.
  3. Выберите каталог установки
    Здесь также можно использовать параметры по умолчанию, если только у вас нет веских причин не указывать C: \ cygwin в качестве корневого каталога, установить для всех пользователей и выбрать Unix в качестве типа текстового файла по умолчанию.
  4. Выберите локальный каталог пакетов
    Здесь указывается папка, в которой будут сохранены загруженные установочные файлы. Введите путь по вашему выбору, например, E: \ cygwinfiles.
  5. Выберите тип подключения
    Здесь вы выбираете подходящий тип подключения; опция по умолчанию — Прямое соединение. Скорее всего, ваша антивирусная программа / брандмауэр появится после нажатия кнопки «Далее», чтобы проверить, хотите ли вы разрешить cygwin_setup.exe доступ в Интернет. Да, именно этого мы и хотим!
  6. Выберите сайт загрузки
    Выберите любой сайт из списка, желательно тот, который вам близок. В зависимости от скорости вашего соединения, до появления следующего экрана может пройти несколько секунд.
  7. Выберите пакеты
    Вам нужно всего лишь сделать два дополнения к выбранным по умолчанию пакетам; cygrunsrv (категория Admin) и postgresql (категория База данных). Cygrunsrv является инициатором службы NT / W2K, а PostgreSQL… ну, вы знаете, что это такое. На момент написания, версия Системы управления базами данных — 7.3.4.

    Если вы помешаны на контроле, убедитесь, что cygipc (категория Devel) входит в число предварительно выбранных пакетов. Cygipc обеспечивает поддержку IPC (InterProcess Communication) для Cygwin, но в конечном итоге будет заменен на «cygwin-daemon». На момент написания статьи PostgreSQL зависит от cygipc.

    Теперь вы можете отдохнуть и выпить кофе, пока файлы загружаются и устанавливаются.

  8. Создать иконки
    Ну, этот последний экран довольно очевиден.

Нажмите «Готово» и счастливо улыбнитесь, когда увидите…

Установка завершена!

Установка Сервисов

Установка завершена? Нет, не сейчас. Файлы находятся где-то в C: \ cygwin или там, где вы решили их разместить. Теперь вы должны установить службы, создать пользователя postgres и инициализировать PostgreSQL.

Эти инструкции основаны на файле postgresql-7.3.4.README, написанном Джейсоном Тишлером, который находится в / usr / doc / Cygwin. В этом файле вы можете найти инструкции по базовой установке Cygwin PostgreSQL, которая является вашей единственной опцией, если вы используете Windows 95/98 / ME (но, если вы спросите меня, единственный вариант для кого-то, работающего под управлением Windows 9x, это: обновить! ).

Запустите недавно установленную оболочку Cygwin Bash и выполните следующие действия:

Установите ipc-daemon2 в качестве службы NT

Как вы помните из установки Cygwin, Cygipc — это демон межпроцессного взаимодействия, от которого зависит PostgreSQL.

ipc-daemon2 --install-as-service 

Если вы любопытный человек (как и я), запустите оснастку консоли MMC служб в Windows (services.msc) и убедитесь, что в списке есть новая служба Cygwin IPC Daemon 2.

Создать новую учетную запись пользователя

Цитата из документации PostgreSQL гласит: «Рекомендуется запускать PostgreSQL под отдельной учетной записью пользователя».

Итак, давайте добавим нового пользователя и из-за нехватки воображения назовем нового пользователя «postgres». Обратите внимание, что вы должны заменить ******** ниже на пароль, который вы хотите использовать для postgres.

Вы можете выполнить одну команду net user со всеми параметрами (полное имя, комментарий, homedir) в одной строке, но я написал их как отдельные команды, чтобы сделать текст более читабельным. Чтобы увидеть синтаксис net user, введите «net user /?».

 net user postgres ******** /add  net user postgres /fullname:postgres  net user postgres /comment:'PostgreSQL User Account'  net user postgres /homedir:"$(cygpath -w /home/postgres)" 

Если вам это нравится, проверьте оснастку MMC «Локальные пользователи и группы» (compmgmt.msc), чтобы postgres присоединился к команде. Там также должна быть вновь созданная папка с именем C: \ cygwin \ home \ postgres.

Обновите файл / etc / passwd

 mkpasswd -l -u postgres >> /etc/passwd 

Приведенная выше команда, переведенная на английский язык, означает: добавить информацию для указанного пользователя postgres в / etc / passwd. Обратите внимание, что должно быть два символа больше, чем!

Предоставить Postgres право войти в систему как сервис

Почему? Это довольно очевидно; postgres — это пользователь, который должен запустить службу postmaster позже. Запустите оснастку MMC «Локальные параметры безопасности» (secpol.msc) и добавьте postgres в список пользователей, которые могут войти в систему в качестве службы, в разделе «Назначение прав пользователя для локальных политик».

Создать каталог данных

Именно здесь PostgreSQL будет хранить данные, конечно.

 mkdir /usr/share/postgresql/data 

Сделайте postgres владельцем области данных

Еще одна естественная вещь; Конечно, никто, кроме postgres, не должен владеть каталогом данных.

 chown postgres /usr/share/postgresql/data 

Позже процесс инициализации отменит разрешения для всех, кроме postgres.

Установите postmaster в качестве службы NT

Postmaster — это имя сервера PostgreSQL, расположенного в / usr / bin. Postmaster также будет названием службы, которую вы создаете (кто сказал «нехватка воображения» ?!).

 cygrunsrv -I postmaster -p /usr/bin/postmaster    -a "-D /usr/share/postgresql/data -i"    -y ipc-daemon2 -s INT -u postgres -o 

Обратите внимание, что команда была разделена на три строки, чтобы сделать ее более читабельной, но вы должны написать все в одной строке.

Вау! Что означают все эти варианты? Перевод: Установите ( -I ) новый сервис, называемый postmaster, с путем приложения ( -p ) / usr / bin / postmaster, аргументами ( -a ) «-D / usr / share / postgresql / data -i», который, в свою очередь, означает, что postmaster должен использовать / usr / share / postgresql / data в качестве каталога данных ( -D ), а соединения TCP / IP ( -i ) должны быть включены.

Кроме того, служба postmaster зависит от ( -y ) другой службы, называемой ipc-daemon2, отправляет сигнал INT после завершения ( -s ), запускается пользователем ( -u ) postgres и останавливается во время выключения системы ( -o ).

Cygrunsrv попросит вас (дважды) ввести пароль в интерактивном режиме.

Чтобы увидеть синтаксис cygrunsrv, введите «cygrunsrv -h». Если вы хотите узнать больше о параметрах сервера PostgreSQL, введите «postmaster –help».

Теперь, если вы загляните в оснастку консоли MMC служб (services.msc), вы увидите еще одну службу в списке. Дважды щелкните на postmaster, чтобы просмотреть различные свойства, которые вы только что присвоили (Вход в систему, Зависимости и т. Д.).

Создать кластер базы данных

Прежде чем вы сможете запустить postmaster (службу), хранилище базы данных должно быть инициализировано. Вы должны выполнить команду initdb систему как пользователь postgres.

Примечание: войдите как пользователь postgres! Чтобы избежать всех возможных проблем, выйдите из Windows и войдите снова, но на этот раз как postgres (т.е. не используйте команду su в cygwin для переключения пользователя).

Запустите Cygwin Bash Shell и введите:

 initdb -D /usr/share/postgresql/data 

-D используется, чтобы указать, где находится область данных (довольно легко догадаться, не так ли?). Теперь вы можете выйти и снова войти в систему под своим именем.

Проверьте, работает ли PostgreSQL

Наконец, теперь вы должны иметь возможность подключиться к PostgreSQL. Запустите Cygwin, подключитесь как пользователь postgres и используйте базу данных template1, созданную initdb.

 psql -U postgres template1 

template1 базы template1 , как вы понимаете, является шаблоном по умолчанию, который копируется при создании новой базы данных с помощью команды createdb или оператора CREATE DATABASE.

Если по какой-либо причине вы получили сообщение типа «psql: не удалось подключиться к серверу», запустите службу postmaster с помощью этой команды:

 net start postmaster 

Чтобы узнать больше о том, как использовать psql, интерактивный терминал PostgreSQL, введите «psql –help». Я думаю, что мы можем определить общее правило здесь: любая команда плюс «- help» покажет вам некоторый полезный текст!

Подключитесь к PostgreSQL из PHP

Откройте файл php.ini (скорее всего, находится в C: \ winnt), найдите раздел «Динамические расширения» и откомментируйте строку, содержащую «extension = php_pgsql.dll». Сохраните и закройте php.ini и перезапустите Apache. Если веб-сервер жалуется и сообщает, что не может загрузить динамическую библиотеку, вы, вероятно, ввели неправильный путь для extension_dir в php.ini (раздел Пути и каталоги). Другая возможная — хотя и маловероятная — причина в том, что файл php_pgsql.dll отсутствует в каталоге расширений.

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

 <?  $conn = pg_connect("host=localhost    port=5432    dbname=template1    user=postgres    password=********");  $sql = "SELECT current_date AS today;";  $result = pg_query($conn, $sql);  $row = pg_fetch_object($result, 0);  echo "Today is: " .$row->today;  ?> 

Сценарий не слишком интересен, но, по крайней мере, показывает, как подключиться к базе данных и выполнить запрос.

Обратите внимание, что приведенный выше код не должен быть примером передового опыта в PHP. Конечно, вы должны добавить обработку ошибок, используйте pg_close() для явного закрытия соединения, когда вы закончите и т.д. База данных template1 должна использоваться как шаблон (что еще?) Для новых баз данных, которые вы создаете для своего приложения ( s), и вы должны создать новых пользователей и дать им соответствующие привилегии (т.е. не подключаться как postgres).

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

Для получения дополнительной информации о том, как использовать функции PHP PostgreSQL, см. Статьи Перенос сайта с MySQL на PostgreSQL, часть 1 и часть , и, конечно же, документацию по PHP .

Полезные инструменты

Командная строка SQL может быть интересным, если вы настоящий гик, но для управления базами данных я использовал Aqua Data Studio v 3.0 от AquaFold, Inc. Ну, это не MSSQL Enterprise Manager или даже MySQL Control Center, но он дает вам лучшее представление об объектах, чем через интерактивный терминал psql. Приятной особенностью Aqua Data Studio является то, что вы можете подключаться и просматривать в одной древовидной структуре другие типы баз данных; MySQL, MSSQL, Oracle и многое другое.

Если вы просто хотите управлять своей базой данных PostgreSQL, pgAdmin — это инструмент для вас. Я предполагаю, что «десятки тысяч разработчиков по всему миру» не могут быть абсолютно неправы. Помните, это не обзор программного обеспечения, поэтому несколько слов. Другой вариант — использовать MS Access (в конце концов, вы используете Windows, так что, скорее всего, у вас также есть MS Office) в качестве внешнего интерфейса для PostgreSQL, но затем вам сначала нужно установить драйвер psqlODBC .

Поскольку у вас есть Apache и PHP, вы можете использовать phpPgAdmin , инструмент на основе браузера, который не полностью отличается от phpMyAdmin для MySQL.

эпилог

Надеемся, что вы нашли эту статью интересной, вы не могли дождаться, чтобы попробовать процедуру установки самостоятельно, и теперь вы заняты поглощением знаний о PostgreSQL (см. Ссылки выше). Если вы являетесь пользователем MySQL, я уверен, что вы обнаружите полезную функциональность, отсутствующую в MySQL. Если вы являетесь пользователем MSSQL, вы по достоинству оцените, что PostgreSQL доступен бесплатно, но при этом обладает множеством мощных функций.

Обратите внимание, что в настройке Cygwin нет деинсталлятора. Если вы хотите удалить вещи, которые вы добавили после прочтения этого урока, вам придется вручную удалить…

  • HKEY_CURRENT_USER \ Программное обеспечение \ Cygnus Solutions
  • HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Cygnus Solutions
  • HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ ИПК-daemon2
  • HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ почтмейстер
  • учетная запись пользователя postgres
  • установочный каталог Cygwin (не забудьте; вы должны стать владельцем каталога данных, прежде чем сможете его удалить)
  • каталог локальных пакетов

Удачи!