Самоучитель по SQL-сервер в Linux



Инициализация файловой системы

Перед созданием базы данных в кластере необходимо предварительно выполнить инициализацию файловой системы. В PostgreSQL это можно сделать двумя способами: либо, как при установке PostgreSQL, воспользоваться приложением initdb для создания нового кластера (см. главу 2), либо создать вторичный каталог данных при помощи приложения initlocation.

Кластер представляет собой несколько взаимосвязанных баз данных. Один экземпляр процесса postmaster в любой момент времени работает только с одним кластером. При помощи приложения initlocation можно создать базы данных, принадлежащие существующим кластерам, но хранящиеся в других каталогах данных.

Инициализация кластера баз данных

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

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

После создания нового кластера приложением initdb файловая система этого кластера будет принадлежать пользователю операционной системы, запустившему приложение.

ВНИМАНИЕ

Не запускайте программу initdb с правами root! Обычный пользователь, создавший кластер, становится владельцем нового кластера, то есть его суперпользователем.

Программа initdb также может исправить поврежденную базу данных template 1, для чего она запускается с ключом -t (или - -template). В этом случае база данных template 1 строится заново.

Синтаксис команды запуска программы initdb:

Initdb [ -D каталог \ --pgdata=Karanor ]

[ -1 sysid | --sysid=sysid ]

[ -W | --pwprompt ]

t -E кодировка | --еncoding=кодировка ]

[ -L каталог \ --pglib=каталог ]

[ -n | --noclean ]

[ -d | --debug ]

С -t I --template ]

Ключи initdb описаны ниже.

  • -D каталог \ - -pgdata=Kamonoz. Каталог, в котором инициализируется новый кластер баз данных. Если имя каталога не задано, команда 1 ni tdb проверяет значение переменной PGDATA.
  • -i sysid \ --sysid=sysid. Системный идентификатор суперпользователя нового кластера. Если параметр не задан, используется системный идентификатор пользователя, запустившего программу initdb.
  • -W | - -pwprompt. Приглашение для ввода пароля после подключения.
  • -Е кодировка \ --еncoding=кодировка. Имя расширенной кодировки для базы данных-шаблона в новом кластере. Заданная кодировка будет использоваться по умолчанию для всех баз данных, создаваемых в этом кластере. Ключ используется лишь в том случае, если вы активизировали поддержку расширенных кодировок в PostgreSQL
  • -L каталог pglib=каталог. Местонахождение библиотечных файлов PostgreSQL, используемых программой initdb при создании кластера. Необходимость в передаче этого параметра возникает крайне редко. Обычно местонахождение файлов известно программе initdb, а если неизвестно — она запросит необходимые данные.
  • -t --template. С ключом template программа initdb заново инициализирует базу данных template 1 в существующем кластере баз данных. Такая возможность может пригодиться при обновлении версии PostgreSQL, при потере или нарушении целостности данных.
  • -n | --noclean. Ключ nodean означает, что программа initdb не должна удалять файлы, если ей не удастся завершить создание кластера из-за ошибки. Используется только при отладке.
  • -d | - -debug. Ключ debug обеспечивает вывод отладочной информации при создании служебных таблиц.

В случае успешного завершения команда initdb создает кластер баз данных в заданном каталоге. Созданный кластер может использоваться PostgreSQL для хранения баз данных.

В листинге 9.7 приведен пример инициализации кластера в каталоге /usr/local/ psql/booktown.

Листинг 9.7. Инициализация нового кластера

[postgres@booktown -]$ initdb /usr/local/pgsql/booktown

This database system will be initialized with username "postgres".

This user will own all the data files and must also own the server process.

Creating directory /usr/local/pgsql/booktown

Creating directory /usr/local/pgsql/booktown/base

Creating directory /usr/local/pgsql/booktown/global

Creating directory /usr/local/pgsql/booktown/pg_xlog

Creating tempiatel database in /usr/local/pgsql/booktown/base/1

DEBUG: database system was shut down at 2001-08-27 16:51:07 PDT

DEBUG: Checkpoint record at (0. 8)

DEBUG: Redo record at (0, 8); Undo record at (0. 8): Shutdown TRUE

DEBUG: Next Transaction: 514: NextOid: 16384

DEBUG: database system is in production state

Creating global relations in /usr/local/pgsql/booktown/global

DEBUG: database system was shut down at 2001-08-27 16:51:14 PDT

DEBUG: Checkpoint record at (0. 108)

DEBUG: Redo record at (0. 108): Undo record at (0. 0): Shutdown TRUE

DEBUG: NextTransactionld: 514: NextOid: 17199

DEBUG: database system is in production state

Initializing pg_shadow.

Enabling unlimited row width for system tables.

Creating system views.

Loading pg_description.

Setting lastsysoid.

Vacuuming database.

Copying tempiatel to tempiateO.

Success. You can now start the database server using:

/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/booktown or

/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/booktown -1 logfile start

Инициализация вторичного каталога

Если вы не хотите создавать новый кластер, а всего лишь хотите переместить базу данных в другой каталог, воспользуйтесь программой initlocation. Эта программа создает каталоги, необходимые для вторичного хранения баз данных. За дополнительной информацией о создании баз данных во вторичных каталогах обращайтесь к разделу «Создание и удаление баз данных» этой главы. Синтаксис команды initlocation: initlocation каталог

Параметр каталог содержит путь к новому вторичному каталогу. Команда i ni tl ocation должна выполняться пользователем, запустившим процесс postmaster, чтобы он имел необходимые права для созданного каталога.

В листинге 9.8 приведен пример инициализации вторичной области хранения баз данных в каталоге /usr/local/pgsql/booktown2.

Листинг 9.8. Инициализация вторичного каталога

[postgres@booktown -]$ initlocation /usr/local/pgsql/booktown2




Книжный магазин