Создание репозитория метаданных в OC Linux

Для создания репозитория на сервере PostgreSQL в ОС Linux:

  1. Скачайте файл Scheme.sql с исходными данными репозитория.

  2. Создайте скрипт Pg_cr.sh с указанными параметрами в содержании:

export USERNAME = <имя пользователя PostgreSQL>;
export PGPASSWORD = <пароль пользователя>;
export ROLE = <роль пользователя>;
export SERVER = <адрес сервера СУБД>;
export PORT = <порт сервера СУБД>;
export DBNAME = <имя базы данных>;
export DBPASSWORD = <пароль пользователя базы данных>;
export FILENAME = scheme.sql; // путь до файла с исходными данными репозитория
psql --host=$SERVER --port $PORT --username $USERNAME --dbname postgres --no-password -c "\\x" -c "select pg_terminate_backend(pid) from pg_stat_activity where datname = '${DBNAME}';";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname postgres --no-password -c "\\x" -c "drop database IF EXISTS \"${DBNAME}\";";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname postgres --no-password -c "\\x" -c "DROP ROLE IF EXISTS \"${ROLE}\";";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname postgres --no-password -c "\\x" -c "CREATE ROLE \"${ROLE}\" LOGIN ENCRYPTED PASSWORD '${DBPASSWORD}' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname postgres --no-password -c "\\x" -c "ALTER DATABASE \"${DBNAME}\" SET lo_compat_privileges = 'on';";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname postgres --no-password -c "\\x" -c "CREATE DATABASE \"${DBNAME}\" WITH OWNER = \"${ROLE}\" ENCODING = 'UTF8' TABLESPACE = pg_default  LC_COLLATE = default LC_CTYPE = default CONNECTION LIMIT = -1;";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname postgres --no-password -c "\\x" -c "GRANT ALL ON DATABASE \"${DBNAME}\" TO \"${ROLE}\";";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname $DBNAME --no-password -c "\\x" -c "CREATE FUNCTION loin (cstring) RETURNS lo AS 'oidin' LANGUAGE internal IMMUTABLE STRICT;";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname $DBNAME --no-password -c "\\x" -c "CREATE FUNCTION loout (lo) RETURNS cstring AS 'oidout' LANGUAGE internal IMMUTABLE STRICT;";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname $DBNAME --no-password -c "\\x" -c "CREATE FUNCTION lorecv (internal) RETURNS lo AS 'oidrecv' LANGUAGE internal IMMUTABLE STRICT;";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname $DBNAME --no-password -c "\\x" -c "CREATE FUNCTION losend (lo) RETURNS bytea AS 'oidsend' LANGUAGE internal IMMUTABLE STRICT;";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname $DBNAME --no-password -c "\\x" -c "CREATE TYPE lo ( INPUT = loin, OUTPUT = loout, RECEIVE = lorecv, SEND = losend, INTERNALLENGTH = 4, PASSEDBYVALUE );";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname $DBNAME --no-password -c "\\x" -c "CREATE CAST (lo AS oid) WITHOUT FUNCTION AS IMPLICIT;";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname $DBNAME --no-password -c "\\x" -c "CREATE CAST (oid AS lo) WITHOUT FUNCTION AS IMPLICIT;";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname $DBNAME --no-password -c "\\x" -c "CREATE OR REPLACE FUNCTION lo_manage() RETURNS pg_catalog.trigger AS '\$libdir/lo' LANGUAGE C;";
psql -U postgres -h $SERVER $DBNAME --single-transaction -f $FILENAME
psql --host=$SERVER --port $PORT --username $USERNAME --dbname $DBNAME --no-password -c "\\x" -c "grant all on all tables in schema public to \"${ROLE}\";";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname $DBNAME --no-password -c "\\x" -c "grant all on all SEQUENCES in schema public to \"${ROLE}\";";
psql --host=$SERVER --port $PORT --username $USERNAME --dbname $DBNAME --no-password -c "\\x" -c "grant all on all functions in schema public to \"${ROLE}\";";
  1. Запустите созданный скрипт.

После выполнения действий будет создан репозиторий метаданных в указанной СУБД.

См. также:

Создание и управление репозиториями метаданных