установка PostGIS для aaPanel PostgreSQL

## 🚀 Полная инструкция по установке PostGIS для aaPanel PostgreSQL 18

### Шаг 1: Установка необходимых зависимостей
```bash
sudo apt update
sudo apt install -y build-essential libgeos-dev libproj-dev libgdal-dev libjson-c-dev libxml2-dev libprotobuf-c-dev protobuf-c-compiler
```

### Шаг 2: Создание символических ссылок для библиотек
```bash
sudo ln -s /usr/lib/x86_64-linux-gnu/libproj.so.25 /www/server/pgsql/lib/libproj.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libgeos_c.so.1 /www/server/pgsql/lib/libgeos_c.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libprotobuf-c.so.1 /www/server/pgsql/lib/libprotobuf-c.so
```

### Шаг 3: Скачивание и распаковка PostGIS 3.6.0
```bash
cd /tmp
wget https://download.osgeo.org/postgis/source/postgis-3.6.0.tar.gz
tar -xzf postgis-3.6.0.tar.gz
cd postgis-3.6.0
```

### Шаг 4: Настройка переменных окружения
```bash
export PATH=/www/server/pgsql/bin:$PATH
export LD_LIBRARY_PATH=/www/server/pgsql/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/www/server/pgsql/lib/pkgconfig:$PKG_CONFIG_PATH
```

### Шаг 5: Запуск configure с правильными параметрами
```bash
./configure \
  --with-pgconfig=/www/server/pgsql/bin/pg_config \
  --with-geosconfig=/usr/bin/geos-config \
  --with-projdir=/usr \
  --with-gdalconfig=/usr/bin/gdal-config \
  --with-jsondir=/usr \
  --with-protobufdir=/usr \
  --with-xml2config=/usr/bin/xml2-config \
  --without-raster
```

### Шаг 6: Сборка и установка
```bash
make clean
make -j$(nproc)
sudo make install
sudo ldconfig
```

### Шаг 7: Проверка установки расширений
```bash
ls /www/server/pgsql/share/extension/postgis*
```
Должны быть файлы:
```
/www/server/pgsql/share/extension/postgis.control
/www/server/pgsql/share/extension/postgis--3.6.0.sql
/www/server/pgsql/share/extension/postgis_topology.control
/www/server/pgsql/share/extension/postgis_topology--3.6.0.sql
```

### Шаг 8: Активация расширения PostGIS (Способ 1 - через суперпользователя)
```bash
# Подключаемся к базе как суперпользователь postgres
sudo -u postgres /www/server/pgsql/bin/psql -d test4

# В psql выполняем:
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
\q
```

### Шаг 9: Проверка работы PostGIS
```bash
# Подключаемся к базе как обычный пользователь
/www/server/pgsql/bin/psql -U test4 -d test4 -h localhost

# В psql выполняем проверочные запросы:
SELECT postgis_version();
SELECT ST_AsText(ST_Point(1,1));
```

 

ШАГИ НИЖЕ МОЖНО НЕ ВЫПОЛНЯТЬ !!!

 

### Шаг 10: Дополнительная проверка (опционально)
```sql
-- Проверка всех установленных расширений
SELECT * FROM pg_extension;

-- Проверка пространственных функций
SELECT ST_Distance(
    ST_Point(1,1)::geography,
    ST_Point(2,2)::geography
);

-- Создание тестовой таблицы с геометрией
CREATE TABLE test_geoms (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    geom GEOMETRY(POINT, 4326)
);

INSERT INTO test_geoms (name, geom) VALUES 
('Point 1', ST_SetSRID(ST_Point(30.3158, 59.9391), 4326)),
('Point 2', ST_SetSRID(ST_Point(37.6176, 55.7558), 4326));

SELECT name, ST_AsText(geom) FROM test_geoms;
```

## ⚠️ Важные замечания

1. **Права доступа**: Если возникают ошибки прав доступа:
   ```bash
   sudo chown -R postgres:postgres /www/server/pgsql/share/extension/
   sudo chmod 644 /www/server/pgsql/share/extension/postgis*.control
   sudo chmod 644 /www/server/pgsql/share/extension/postgis--*.sql
   ```

2. **Постоянные переменные окружения**: Чтобы не задавать их каждый раз:
   ```bash
   echo 'export PATH=/www/server/pgsql/bin:$PATH' | sudo tee -a /etc/profile
   echo 'export LD_LIBRARY_PATH=/www/server/pgsql/lib:$LD_LIBRARY_PATH' | sudo tee -a /etc/profile
   source /etc/profile
   ```

3. **Резервное копирование**: Перед началом работы сделайте бэкап:
   ```bash
   sudo cp -r /www/server/pgsql /www/server/pgsql_backup_$(date +%F)
   ```

## ✅ Успешная установка подтверждается результатами:

```sql
test4=> SELECT postgis_version();
            postgis_version             
---------------------------------------
 3.6 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

test4=> SELECT ST_AsText(ST_Point(1,1));
 st_astext  
------------
 POINT(1 1)
(1 row)
```

## 🔄 Если нужно активировать PostGIS в других базах

Для каждой базы данных повторите Шаг 8 с указанием нужной базы:
```bash
sudo -u postgres /www/server/pgsql/bin/psql -d имя_вашей_базы
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
```

**Готово!** PostGIS успешно установлен и работает с PostgreSQL 18 в aaPanel. Теперь вы можете использовать все пространственные функции в ваших веб-приложениях через aaPanel.