Не удалось открыть управляющий файл расширения postgres

Обновлено: 04.07.2024

это изменит права доступа для вашей папки. Обратите внимание, что каждый сможет прочитать файл. Вы не можете использовать chown как пользователя без прав администратора. Также рассмотрим обучение umask для облегчения создания общих файлов.

предполагая, что psql инструмент командной строки, вы можете использовать \copy вместо copy .

\copy открывает файл и передает содержимое на сервер, тогда как copy сообщает серверу открыть сам файл и прочитать его, что может быть проблематичным с точки зрения разрешений или даже невозможным, если клиент и сервер работают на разных машинах без совместного использования файлов между ними.

под капотом \copy реализуется как COPY FROM stdin и принимает те же параметры, что и серверная сторона COPY .

скопируйте файл CSV в /tmp

для меня это решило проблему.

возможно это может пригодиться и кому-то еще.

другой способ сделать это, если у вас есть pgAdmin и вам удобно использовать GUI, - это перейти к таблице в схеме и щелкнуть правой кнопкой мыши по таблице, в которую вы хотите импортировать файл, и выбрать "импорт". просмотрите свой компьютер для файла, выберите тип файла, столбцы, в которые вы хотите вменить данные, а затем выберите Импорт.

Это было сделано с помощью pgAdmin III и версии 9.4 PostgreSQL

скопируйте CSV-файл в папку / tmp

файлы, названные в команде копирования, считываются или записываются непосредственно сервером, а не клиентским приложением. Поэтому они должны находиться на компьютере сервера баз данных, а не на клиенте, или быть доступны для него. Они должны быть доступны и доступны для чтения или записи пользователем PostgreSQL (ID пользователя, от имени которого работает сервер), а не клиентом. Копировать именование файла разрешено только суперпользователям базы данных, так как это позволяет читать или запись любого файла, к которому у сервера есть права доступа.

для меня это сработало, чтобы просто добавить sudo (или запустить как root) для команды chown:

sudo chown postgres / users/darchcruise/desktop / items_ordered.csv

может быть, вы используете pgadmin, подключив удаленный хост, а затем пытаетесь обновить его из своей системы, но он ищет этот файл в файловой системе удаленной системы. его ошибка wat, с которой я столкнулся, может быть его также для проверки его

Я установил PostgreSQL 9.x и PostGIS 1.5 / 2.0 несколько раз, и у меня никогда не было этой проблемы.

Я только что установил новый сервер CentOS 6.3, и у меня работает Postgres 9.3, как и ожидалось. Я бегал

и я могу видеть файлы в

однако, когда я бегу

Чего мне не хватает?

@PaulRamsey - я бегал find /usr -name postgis.control и его нет. Я могу видеть некоторые файлы в share / contrib; Тем не менее, postgis.control не входит в их число . что вы предлагаете мне сделать? ждать исправления, сделать свое собственное, что-то еще? @PaulRamsey - я только что проверил, postgis-2.1.so присутствует /lib ли это, значит, я могу просто создать свой собственный файл postgis.control? Если вам удастся найти файл postgis.sql, вы можете запустить его в своей базе данных (и в файлеatial_ref_sys.sql), чтобы вручную разместить вашу базу данных. Сообщите об отсутствующем контрольном файле упаковщику, это большая проблема.

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

У меня просто была такая же проблема на Ubuntu Server 14.04. Я установил postgis расширение из официальных репозиториев Ubuntu, используя apt-get install postgis .

Тогда find /usr -name postgis.control не вернул никаких результатов.

Причина не extension/postgis.control была установлена, потому что постгис-скрипты не были установлены.

Решение состоит в том, чтобы установить это.

На Debian-подобных дистрибутивах:

Менеджер пакетов aptitude автоматически определит правильные версии пакетов для установки. Postgis-doc также будет установлен.

РЕДАКТИРОВАТЬ

Как некоторые люди заметили в комментариях, postgis* это не является обязательным, поскольку оно устанавливает некоторые пакеты, которые строго не требуются, чтобы заставить его работать.

Обязательные пакеты postgis и postgresql-9.x-postgis-scripts метапакеты. Они выбирают правильную реальную версию для вашей системы. Таким образом, команды для установки необходимых пакетов

для postgresql-9.3 . Ubuntu 16.04 запускается, postgresql-9.5 поэтому команда становится:

Вы можете проверить успешность операции, выполнив следующую команду:

На моем сервере он теперь возвращает:

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

Я пытаюсь установить semver на свой Postgresql 12. Я успешно установил postgis и использовал следующую команду для установки pg-semver (расширение semver) на моем сервере Centos 7:

Потом я побежал

Я получил следующую ошибку:

не удалось открыть файл управления расширением /usr/pgsql-12/share/extension/semver.control: такого файла или каталога нет

Я скопировал все файлы из "/ usr / share / pgsql / extension /" в "/ usr / pgsql-12 / share / extension". Теперь я получаю следующую ошибку:

ОШИБКА: ОШИБКА: не удалось получить доступ к файлу "semver": такого файла или каталога нет

ОБНОВЛЕНИЕ (28.02.2020):

Я удалил pg-semver, потому что он поставляет для PSQL 9.2. Сейчас я пытаюсь создать себя, используя документацию, предоставленную разработчиком.

make: ничего не нужно делать для цели "все". затем:

/ bin / sh /usr/lib64/pgsql/pgxs/src/makefiles/../../config/install-sh -c -m 644 ./semver.control '/ usr / share / pgsql / extension /' / bin / sh /usr/lib64/pgsql/pgxs/src/makefiles/../../config/install-sh -c -m 644 ./sql/semver--0.20.0.sql ./sql/semver- - без упаковки - 0.2.1.sql ./sql/semver--0.20.0--0.21.0.sql ./sql/semver--0.12.0--0.13.0.sql ./sql/semver-- 0.3.0--0.4.0.sql ./sql/semver--0.16.0--0.17.0.sql ./sql/semver--0.13.0--0.15.0.sql ./sql/semver- -0.11.0--0.12.0.sql ./sql/semver--0.2.4--0.3.0.sql ./sql/semver--0.2.1--0.2.4.sql ./sql/semver - 0.5.0--0.10.0.sql ./sql/semver--0.10.0--0.11.0.sql ./sql/semver.sql ./sql/semver--0.17.0--0.20. 0.sql ./sql/semver--0.15.0--0.16.0.sql '/ usr / share / pgsql / extension /' / bin / sh / usr / lib64 / pgsql / pgxs / src / makefiles / .. /../config/install-sh -c -m 755 src / semver.so '/ usr / lib64 / pgsql /' / bin / sh /usr/lib64/pgsql/pgxs/src/makefiles/../ .. / config / install-sh -c -m 644 ./doc/semver.mmd '/ usr / share / doc / pgsql / extension /'

============== удаление базы данных "contrib_regression" ============== DROP DATABASE ============== создание база данных "contrib_regression" ============== СОЗДАТЬ БАЗУ ДАННЫХ ALTER DATABASE ============= Установка plpgsql ============ == СОЗДАТЬ ЯЗЫК ============== запуск запросов регрессионного теста ============== тестовая база . СБОЙ (тестовый процесс завершен с кодом выхода 3 )

Я хочу настроить MySQL FDW (Foreign Data Wrapper) для PostgreSQL в Windows.

Я установил pgAdmin III в Windows, который также устанавливает postgreSQL. Затем я запустил эту команду в окне SQL pgAdmin. Я получил эту ошибку:

ОШИБКА: не удалось открыть файл управления расширением "C: /Program Files/PostgreSQL/9.3/share/extension/mysql_fdw.control": нет такого файла или каталога

Но я думаю, что эти инструкции предназначены для Linux. Я не знаю, как заставить их работать для Windows. Кроме того, первые несколько инструкций довольно расплывчаты. Если я запускаю postgres на рабочем столе Windows, что мне нужно делать? Я не знаю никакой команды make или экспорта в Windows.

Сегодня я смог успешно использовать предварительно скомпилированные библиотеки DLL, найденные здесь, для интеграции mysql_fdw 1.0.0 в новую 32- mysql_fdw 1.0.0 установку PostgreSQL 9.3 от официальных установщиков на Windows Server 2012 64bit.

Вот что я сделал:

  • Установите PostgreSQL 9.3.9 32bit из последнего официального установщика ( postgresql-9.3.9-1-windows.exe )
  • Загрузите postgresql-9.3.1-standalone-32-(sqlite_fdw,www_fdw,mysql_fdw,ldap_fdw).7z из http://sourceforge.net/projects/postgresql-mingw-w64/files/
  • Извлеките архив где-нибудь (допустим C:\somewhere\postgresql-9.3.1-standalone-32 ).
  • В извлеченной папке перейдите в папку C:\somewhere\postgresql-9.3.1-standalone-32\01_DLLs_32-DEPLOY_EXTS
  • запустите deploy-x86-on-win64.bat если в Windows 64 бит, deploy-x86-on-win32.bat .
  • В PgAdmin III щелкните правой кнопкой мыши вашу базу данных (допустим postgres ), выберите " New Object > " New Extension
  • В диалоговом окне " New Extension. " откройте раскрывающийся список для Name и выберите для mysql_fdw . (Если не найдено, что-то должно было испортиться раньше). Закончите, нажав OK .

Если все пойдет хорошо, это так!

С этого момента вам нужно будет создать внешний сервер, внешний стол и т.д.

Примечание: если вы используете 64-битную сборку PostgreSQL, я предполагаю, что процедура должна быть аналогичной, за исключением того, что вам нужно загрузить postgresql-9.3.1-standalone-64-(sqlite_fdw,www_fdw,mysql_fdw,ldap_fdw).7z . Но я не проверял его! Пробег может отличаться.



Здравствуйте, хабрачеловеки! Темой этой статьи будет создание расширений для PostgreSQL. В качестве примера, мы реализуем небольшую библиотеку для работы с 3D векторами. Параллельно будут рассмотрены пользовательские типы, операторы и приведения типов. Не будет лишним ознакомися с этим материалом, так как реализация хранимых функций будет на языке C. Надеюсь, друзья слонов помогут скрасить серый технический текст статьи.

Описание



Расширение в PostgreSQL — это совокупность нескольких SQL объектов (типы данных, функции, операторы), объединённых в виде скрипта, динамически загружаемая библиотека (если она необходима) и управляющий файл, в котором указывается имя скрипта, путь к библиотеке, версия по умолчанию и прочие опции. Использование расширений позволяет легко разворачивать дополнительную логику в БД, делать миграцию на более новую версию и, при удалении расширения, корректно удалить зависимые объекты.

  • сложение векторов
  • вычитание векторов
  • умножение вектора на скаляр
  • скалярное произведение
  • векторное произведение
  • нахождение длины вектора
  • нормализация вектора
  • определение дистанции между векторами

Создание типа



СУБД PostgreSQL позволяет определять, помимо композитных типов, типов-перечислений и типов-диапазонов, новые типы данных. Последние требуют реализации функций, работающих с типом, на более низкоуровневом языке, чем SQL, как правило, на C. Определение пользовательского типа требует как минимум две функции: ввода и вывода. Функция ввода имеет один параметр с типом C-строка (массив байтов, заканчивающийся нулем) и возращает пользовательский тип. Функция вывода имеет параметр с пользовательский типом и возращает C-строку. Эти функции требуются для преобразования из внешнего (текстового) отображения во внутреннее представление и наоборот.

  • internallength — размер внутреннего представления
  • alignment — выравнивание, допустимые значения 1, 2, 4, 8 байта
  • storage — выбор хранилища, plain (единственно возможный вариант для типов с фиксированным размером) для хранения без сжатия, extended допускает сжатие и перемещение вне пределов строки таблицы, где объявлен тип, main позволяет сжатие, но запрещает перемещение
  • receive — функция получения для бинарного ввода/вывода
  • send — функция отправки для бинарного ввода/вывода

Условимся, что текстовое представление типа vector3 будет в виде "(x,y,z)", где x, y, z, собственно, компоненты вектора. В функции vector3_in из аргумента, типа C-строка, с помощью sscanf извлекаются компоненты вектора и созданный вектор (точнее указатель на него) возращается в качестве результата функции. В vector3_out происходит обратное действие — преобразование вектора в строку и ее возрат.

Перейдем теперь в консоль, соберём динамически загружаемую библиотеку math3d и поместим ее в каталог $libdir (узнать который можно, выполнив команду pg_config --pkglibdir):

Теперь, давайте создадим тип vector3 в БД:

Обратите внимание, что сперва нужно объявить тип, для того, чтобы была возможность создать функции ввода и вывода. При определении типа, из параметров мы указываем размер внутреннего представления и функции для ввода/вывода.

Выполним тестовый запрос:

Операции с вектором



Тип создан, но на больше, чем приведение к текстовому виду и наоборот, он пока что не способен. Сделаем его более функциональным, расширив его требуемыми операциями:

Напомню, что для выделения памяти следует использовать palloc, для освобождения, соответсвенно pfree. Почему нужны пары функций vector3_mul_left/vector3_mul_right и vector3_div_left/vector3_div_right будет объяснено далее.

Пересоберём библиотеку math3d.so и создадим эти функции в БД, в новой сессию, чтобы сервер PostgreSQL загрузил новую версию библиотеки:

Теперь можно делать разные операции над вектором:

Функционал имеется, но выглядит он не очень хорошо, к примеру, для умножения скаляра на вектор интутивней была бы запись 5.0 * '(0.2,0.2,1.33)'::vector3. Давайте для этого определим операторы.

Пользовательские операторы




В PostgreSQL есть возможность определять свои операторы, используя последовательность из символов + — * / < > =
  • leftarg — тип левого аргумента
  • rightarg — тип правого аргумента
  • procedure — функция, имеющая один (унарный оператор) или два параметра (бинарный оператор) с типами, соответсвующими leftarg и rightarg оператора
  • commutator — подсказка оптимизатору, что выражение x A y эквивалентно y B x, где A — объявляемый оператор, B — оператор для commutator
  • negator — подсказка оптимизатору, что выражение x A y эквивалентно !(x B y), где A — объявляемый оператор, B — оператор для negator и оба оператора должны возращать boolean

И проверим их работоспособность:

Уже лучше. Кстати, мы обьявили два оператора для умножения с аргументом типа скаляр, для случая, когда скаляр слева оператора и когда он справа. И аналогично для деления. Поэтому нам и потребовались пары функций vector3_mul_left/vector3_mul_right и vector3_div_left/vector3_div_right.

Может возникнуть вопрос: а как получить доступ к компонентам вектора? Можно было бы объявить три C-функции vector3_x, vector3_y и vector3_z, которые бы возращали каждую компоненту, но есть способ лучше.

Приведение типов

  • тип который приводится
  • integer — модификатор, ассоциированный с типом к которому происходит приведение или -1
  • boolean — true, если приведение явное, в противном случае false

Определим новый композитный тип vector3c и приведение к нему типа vector3 (и наоборот):

В функции vector3_cast_vector3c мы сперва приводим vector3 к тексту, убираем первую и последнюю скобки и затем, используя разделитель запятую, преобразовываем к массиву из трёх елементов, из которого берем компоненты вектора. В vector3c_cast_vector3, для наглядности, можно сразу преобразовывать vector3c в текст и затем приводить к vector3 (текстовое представление для vector3c и vector3 имеет один и тот же вид).

Проверим приведение типов:

Создание расширения




Когда всё готово и протестировано, осталось обернуть нашу библитеку в расширение. Соберем весь С-код в один файл:
Файл math3d.c (исходный С-код динамически загружаемой библиотеки расширения math3d)
Соберём саму динамически загружаемую библиотеку и поместим ее в каталог PGDIR/lib. Аналогично, создадим файл с SQL кодом:
Файл math3d--1.0.sql (скрипт SQL для расширения math3d)

Имя файла должно быть в виде <имя_расширения>--<версия>.sql. Версия у нас будет 1.0. Поместим этот файл в каталог PGDIR/share/extension. Заметьте, что имя динамически загружаемой библиотеки в объявлениях функций изменилось на переменную MODULE_PATHNAME, которая будет объявлена в управляющем файле расширения. Создадим этот файл:

  • default_version — версия по умолчанию
  • comment — комментарий
  • encoding — кодировка скрипта, если не указана испольуется кодировка БД
  • module_pathname — имя динамически загружаемой библиотеки (подставляется в переменную MODULE_PATHNAME в скрипте)
  • requires — список расширений, от которых зависит текущее
  • relocatable — если true, то расширение не привязывается к конкретной схеме и объекты, после создания, могут быть перемещены в другую схему (по умолчанию false)
  • schema — схема, в которой создаются объекты расширения (параметр имеет значение, если relocatable установлено в false)

Создадим новую БД, соединимся с ней и загрузим наше расширение:

Если проблем нет, можно пользоватся нашим новым типом vector3 — объявлять как поле таблицы или композитного типа, использовать в параметрах функции и в прочих местах. Удаление расширения и зависимых объектов делается аналогичной командой:

Расширение может содержать конфигурационные таблицы, изменяемые после установки расширения. Так как обычные таблицы, создаваемые в скрипте расширения и ее данные не попадают в дамп, конфигурационные таблицы необходимо специальным образом пометить:

Второй параметр pg_catalog.pg_extension_config_dump может содержать условие, которое фильтрует данные, попадаемые в дамп, к примеру, 'WHERE username = ''administrator'''. В нашем случае, нет необходимости в конфигурационных таблицах.

При обновлении расширения до более новой версии создается скрипт, имеющий имя в виде <имя_расширения>--<старая_версия>--<новая_версия>.sql, в котором содержатся SQL команды для обновления. Если бы мы захотели обновить math3d до версии 1.1, нам нужно было бы создать файл math3d--1.0--1.1.sql и выполнить SQL команду в БД:

Остальные команды для изменения расширения (подробней описано тут):

Еще одной хорошей вещью в расширении есть то, что нельзя обычной командой (DROP TABLE, DROP FUNCTION и т.д.) случайно удалить объект, входящий в состав расширения.

Заключение



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

Читайте также: