Как запустить определенную версию (8.4, 9.1) команды postgresql pg_ * (например, pg_dump). Как узнать версию postgresql


Как установить более старую версию postgresql и postgis?

Хорошо. Во-первых, совершенно нормально запускать несколько версий postgresql рядом друг с другом. У вас может быть более одного кластера на поле, и каждый кластер может запускать разные версии. Debian pacakges очень хорошо разработаны, чтобы сделать это легко.

Однако, поскольку вы указали, что новичок в linux/postgresql, вероятно, лучше всего получить 9,3 полностью очищенную от вашей системы, чтобы избежать расстраивания икоты, которые потребуют от вас долгого времени.

Для этого вам необходимо:

  1. Purge всех PostGreSQL 9.3 пакетов из DPKG
  2. вручную удалите 9.3 данных и конфигурацию для 9.3 кластера
  3. Убедитесь, что вы создали 9,1 кластер

Шаг 1 - продувка DPKG

DPKG управляет пакетами в вашей системе. APT действует как механизм для установки пакетов. Множество функциональных возможностей DPKG доступно через apt, но некоторые вещи просто проще на dpkg. В ваших комментариях вы показали, что DPKG по-прежнему показывает остатки 9.3. Когда вы удаляете пакет, некоторые его части могут зависать (например, файлы конфигурации). Вы можете удалить несколько пакетов в одной команде. Чтобы полностью избавиться от них, вы можете сказать dpkg, чтобы очистить их dpkg --purge <package name>. Вы можете удалить несколько пакетов в одной команде, и лучше всего это сделать.

dpkg --list будет перечислять все, что в вашей системе. dpkg --list | grep postgresql ищет этот список для postgresql.

Шаг 2 - Вручную удалите данные и конфигурацию из старого кластера 9.3.

Когда вы впервые устанавливаете postgresql, он создает кластер для вас; никаких вопросов не было задано. Это вызывает множество новых пользователей, потому что они не знали, что это произошло, и как их заменить. Теперь, когда 9,3 деинсталлируется вы можете пойти дальше и просто удалить конфигурацию и данные:

Если есть все, что вы хотели, чтобы в смонтированном 9.3 базы данных НЕ выполнить следующие команды

sudo rm -rf /etc/postgresql/9.3 Удаляет конфигурацию ,

sudo rm -rf /var/lib/postgresql/9.3 Удаляет данные.

Шаг 3 - Создание нового кластера

вы указали в комментариях, что PostGreSQL 9,1 установлен. Прежде чем запускать эту команду, стоит прочитать руководство. man pg_createcluster.

sudo pg_createcluster 9.1 <think up a name>

Теперь вы должны быть в состоянии запустить PostgreSQL sudo service postgresql start

Редактировать

Если pg_config еще перечисляя неправильную версию, то ... это может быть результатом остатков 9.3 все еще остался в вашей системе. Это может быть не проблема. Чтобы позволить нескольким версиям работать вместе друг с другом, pg_config - это сценарий оболочки, который выполняет поиск последней (самой высокой версии)/usr/lib/postgresql/*/bin/pg_config. Итак, что вы видите, это результат запуска /usr/lib/postgresql/9.3/bin/pg_config. Если 9.3 полностью очищено от вашей системы, то следует оставить /usr/lib/postgresql/9.3.

Если вы хотите увидеть конфигурацию 9.1, попробуйте запустить: /usr/lib/postgresql/9.1/bin/pg_config.

Сценарии-оболочки, которые запускают сервер, будут использовать файловую структуру/etc/postgresql и использовать подходящую версию. Таким образом, /etc/postgresql/9.1/main будет загружать версию как 9.1.

stackoverrun.com

postgresql - Как я могу узнать, что находится в табличном пространстве Postgresql?

Я создал новое табличное пространство под названием indexes, и я пытаюсь удалить старое табличное пространство indexes_old, которое использовалось для хранения некоторых таблиц и индексов. Когда я пытаюсь удалить табличное пространство, я получаю:

=> drop tablespace indexes_old; ERROR: tablespace "indexes_old" is not empty

Но когда я пытаюсь увидеть, что там, кажется, что в этом табличном пространстве нет таблиц:

=> select * from pg_tables where tablespace = 'indexes_old'; schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers ------------+-----------+------------+------------+------------+----------+------------- (0 rows) => select * from pg_indexes where tablespace = 'indexes_old'; schemaname | tablename | indexname | tablespace | indexdef ------------+-----------+-----------+------------+---------- (0 rows)

Итак, что в этом табличном пространстве мешает мне отказаться от него?

В случае, если это имеет значение, я только что перешел с Pg 8.4 на Pg 9.0 с помощью инструмента pg_upgrade.

Табличные пространства выглядят следующим образом:

Name | Owner | Location | Access privileges | Description -------------+----------+-----------------+-------------------+------------- indexes | nobody | /data/pgindex90 | | indexes_old | nobody | /data/pgindex84 | |

а содержимое /data/pgindex 84 включает все старые индексы 8.4, а также новый индекс 9.0, который автоматически создает pg_upgrade

# sudo ls -al /data/pgindex84/PG_9.0_201008051/11874 total 8280 drwx------ 2 postgres postgres 4096 Feb 9 14:58 . drwx------ 3 postgres postgres 4096 Feb 11 09:28 .. -rw------- 1 postgres postgres 40960 Feb 9 14:58 10462602 -rw------- 1 postgres postgres 40960 Feb 9 14:58 10462604 -rw------- 1 postgres postgres 4644864 Feb 9 14:58 10462614 -rw------- 1 postgres postgres 3727360 Feb 9 14:58 10462616 источник поделиться

qaru.site

Как запустить определенную версию (8.4, 9.1) команды postgresql pg_ * (например, pg_dump)

Вы находитесь на Ubuntu и, очевидно, установили pg_wrapper Martin Pitt (судя по pg_ctlcluster ), который предоставляется пакетом postgresql-common и поставляется со стандартными пакетами Debian. Я использую то же самое на Debian .

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

postgres@db:~$ which pg_dump /usr/bin/pg_dump postgres@db:~$ ls -l /usr/bin/pg_dump lrwxrwxrwx 1 root root 37 4. Jun 18:57 /usr/bin/pg_dump -> ../share/postgresql-common/pg_wrapper

pg_dump на самом деле символическая ссылка на pg_wrapper , которая динамически выбирает подходящую версию клиентской программы для кластера db, с которой вы запускаете pg_dump . Я цитирую страницу man pg_wrapper :

Эта программа запускается только как ссылка на имена, которые соответствуют программам PostgreSQL в / usr / lib / postgresql / version / bin. Он определяет сконфигурированный кластер и базу данных для пользователя и вызывает соответствующую версию желаемой программы для подключения к этому кластеру и базе данных, предоставляя любые указанные параметры этой команде.

The target cluster is selected by the following means, in descending order of precedence: 1. explicit specification with the --cluster option 2. explicit specification with the PGCLUSTER environment variable 3. matching entry in ~/.postgresqlrc (see postgresqlrc(5)), if that file exists 4. matching entry in /etc/postgresql-common/user_clusters (see user_clusters(5)), if that file exists 5. If only one local cluster exists, that one will be selected. 6. If several local clusters exist, the one listening on the default port 5432 will be selected. If none of these rules match, pg_wrapper aborts with an error.

IOW, правильная версия должна быть выбрана автоматически - если вы не испортили свою установку. Вы всегда можете добавить опцию --cluster чтобы быть конкретным.

ru.1answer.info

Начало работы с PostgreSQL | Записки программиста

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

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

sudo apt-add-repository ppa:pitti/postgresqlsudo apt-get updatesudo apt-get install postgresql-9.2

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

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

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

CREATE DATABASE test_database;CREATE USER test_user WITH password 'qwerty';GRANT ALL ON DATABASE test_database TO test_user;

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

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

psql -h localhost test_database test_user

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

CREATE SEQUENCE user_ids;CREATE TABLE users (  id INTEGER PRIMARY KEY DEFAULT NEXTVAL('user_ids'),  login CHAR(64),  password CHAR(64));

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

SELECT NEXTVAL('user_ids');

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

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

CREATE TABLE users2 (  id SERIAL PRIMARY KEY,  login CHAR(64),  password CHAR(64));

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

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

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

CREATE TABLE "anotherTable" ("someValue" VARCHAR(64));

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

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

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

SET search_path TO bookings;

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

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

INSERT INTO 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.9pg_dump: aborting because of server version mismatch

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

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

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

eax.me

Как запустить определенную версию (8.4, 9.1) команды postgresql pg_ * (например, pg_dump)

Вы находитесь на Ubuntu и, очевидно, установили pg_wrapper Martin Pitt (судя по pg_ctlcluster ), который предоставляется пакетом postgresql-common и поставляется со стандартными пакетами Debian. Я использую то же самое на Debian .

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

postgres@db:~$ which pg_dump /usr/bin/pg_dump postgres@db:~$ ls -l /usr/bin/pg_dump lrwxrwxrwx 1 root root 37 4. Jun 18:57 /usr/bin/pg_dump -> ../share/postgresql-common/pg_wrapper

pg_dump на самом деле символическая ссылка на pg_wrapper , которая динамически выбирает подходящую версию клиентской программы для кластера db, с которой вы запускаете pg_dump . Я цитирую страницу man pg_wrapper :

Эта программа запускается только как ссылка на имена, которые соответствуют программам PostgreSQL в / usr / lib / postgresql / version / bin. Он определяет сконфигурированный кластер и базу данных для пользователя и вызывает соответствующую версию желаемой программы для подключения к этому кластеру и базе данных, предоставляя любые указанные параметры этой команде.

The target cluster is selected by the following means, in descending order of precedence: 1. explicit specification with the --cluster option 2. explicit specification with the PGCLUSTER environment variable 3. matching entry in ~/.postgresqlrc (see postgresqlrc(5)), if that file exists 4. matching entry in /etc/postgresql-common/user_clusters (see user_clusters(5)), if that file exists 5. If only one local cluster exists, that one will be selected. 6. If several local clusters exist, the one listening on the default port 5432 will be selected. If none of these rules match, pg_wrapper aborts with an error.

IOW, правильная версия должна быть выбрана автоматически - если вы не испортили свою установку. Вы всегда можете добавить опцию --cluster чтобы быть конкретным.

ru.1answer.info