В Postgresql нет cubedata.h и справочного каталога - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть 128-мерные векторы с плавающей точкой (проблема распознавания лиц).Для хранения этих векторов я использую куб типа данных в Postgresql.Этот тип имеет ограничение по умолчанию - 100 dim.

В psql (PostgreSQL) 10.5 (Ubuntu 10.6-0ubuntu0.18.04.1) это ограничение не работает: я могу сохранить свой вектор без проблем.Но в один прекрасный день одна из моих машин была обновлена ​​до PostgreSQL 10.6, и теперь я получаю сообщение об ошибке при попытке добавить новый куб-вектор в мою базу данных.Ошибка о слишком длинном векторе.

Чтобы решить эту проблему, я должен изменить это ограничение в файле cubedata.h , который находится в каталоге contrib .Но у меня нет этого файла и такой директории вообще!

Я пытаюсь установить

sudo apt-get install postgresql-contrib

, но я получаю сообщение о том, что новейшая версия postgresql-contrib уже установлена.

После того, как я попытался вручную загрузить файл cubedata.h в каталог Postgresql (/ usr / share / postgresql / 10 / extension /), но это не помогло.

Возможно, кто-то столкнулся стакая проблема?

1 Ответ

0 голосов
/ 17 января 2019

В Ubuntu 18.04.1 cubedata.h , включенный в пакет postgres-server-dev-10 из официального репозитория PostgreSQL .Но предварительно скомпилированный cube.so включен в пакет postgresql-10 с лимитом по умолчанию.

Для увеличения лимита вы должны перекомпилировать cube.so из исходного кода.Ниже приведен пример кода для Ubuntu.

Добавление репозитория:

PG_VER=10.6
source /etc/os-release
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ ${VERSION_CODENAME}-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt-get update
sudo apt-get install -y postgresql-${PG_VER%.*}

Компиляция cube расширение из источника:

PG_VER=10.6
sudo apt-get install -y unzip gcc make zlib1g-dev libreadline-dev postgresql-server-dev-${PG_VER%.*} bison flex
wget https://ftp.postgresql.org/pub/source/v${PG_VER}/postgresql-${PG_VER}.tar.bz2 --quiet -O postgresql.tar.bz2
tar xvf postgresql.tar.bz2
cd postgresql-${PG_VER}
./configure
cd contrib/cube
sed -i 's/#define CUBE_MAX_DIM (100)/#define CUBE_MAX_DIM (128)/' cubedata.h
make USE_PGXS=1
sudo make USE_PGXS=1 install

Проверка результата после перезапуска сервера:

sudo -u postgres psql dbname -c 'CREATE EXTENSION cube'
sudo -u postgres psql dbname -c 'SELECT cube_dim(cube(array(select generate_series(1, 128)))) as dim'
...