Table of Contents
- docker 方式搭建操作系统 (openEuler 22.03-LTS-SP4)
- 配置 yum 源
- 下载编译环境需要的包
- 下载 PolarDB for PostgreSQL 源码
- 编译
- 初始化数据库并测试数据库可以正常运行
- 编译 pg_repack
- 编译 PostGIS
- 安装基础包(安装 libtiff, libcurl,mpfr 等库(proj会依赖该库))
- 编译 proj 8.2.1
- 编译 GEOS 3.12.1
- 编译 GDAL 3.8.0
- 编译 PostGIS 3.4.1
- 打印信息
- 编译 PgRouting
- 验证 postgis 与 pgrouting 插件功能
docker 方式搭建操作系统 (openEuler 22.03-LTS-SP4)
wget https://mirrors.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/docker_img/x86_64/openEuler-docker.x86_64.tar.xz
docker load -i openEuler-docker.x86_64.tar.xz
docker run -it -d --name openeuler22.03_sp4 -h openeuler22.03_sp4 -p 23222:22 -p 23389:3389 --privileged=true openeuler-22.03-lts-sp4 /bin/bash
docker exec -it openeuler22.03_sp4 /bin/bash
配置 yum 源
cd /etc/yum.repos.d/
mkdir -p backup
mv openEuler.repo backup
cat > /etc/yum.repos.d/openEuler.repo <<"EOF"
[OS]
name=OS
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/OS/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler
[everything]
name=everything
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/everything/$basearch/RPM-GPG-KEY-openEuler
[EPOL]
name=EPOL
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/EPOL/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/OS/$basearch/RPM-GPG-KEY-openEuler
EOF
yum clean all
yum makecache
下载编译环境需要的包
dnf upgrade -y --refresh
dnf install -y epel-release epel-next-release
dnf remove -y langpacks-en
dnf install -y glibc-langpack-en glibc-langpack-zh
dnf clean all
dnf install glibc-all-langpacks
locale -a # 执行下看看结果
# GCC and LLVM (should be 15)
dnf install -y \
gcc \
gcc-c++ \
gdb \
make \
cmake \
clang \
llvm-devel \
&& \
dnf clean all
# Dependencies
dnf install -y \
bison \
flex \
fuse-devel \
gettext \
krb5-devel \
krb5-server \
krb5-workstation \
libaio-devel \
libicu-devel \
libunwind-devel \
libuuid-devel \
libxml2-devel \
libxslt-devel \
libzstd-devel \
lz4-devel \
openldap-devel \
openssl-devel \
pam-devel \
perl-CPAN \
perl-DBI \
perl-IPC-Run \
perl-ExtUtils-Embed \
perl-File-Find-Rule \
perl-Test-Simple \
python3-devel \
readline-devel \
tcl-devel \
xerces-c-devel \
zlib-devel \
&& \
dnf clean all
# Tools
dnf install -y \
autoconf \
wget \
sudo \
vim \
git \
rpm-build \
&& \
dnf clean all
yum install iproute
# create user
# USER_NAME=postgres
# groupadd -r $USER_NAME -g 1000 && \
# useradd -u 1000 -g $USER_NAME $USER_NAME -p '' && \
# usermod -aG wheel $USER_NAME
# cd /home/$USER_NAME
# modify conf
# echo "ulimit -c unlimited" >> /home/postgres/.bashrc
# echo "export PGHOST=127.0.0.1" >> /home/postgres/.bashrc
# echo "export PATH=/home/postgres/tmp_polardb_pg_15_base/bin:\$PATH" >> /home/postgres/.bashrc
# echo "export PATH=/home/postgres/tmp_polardb_pg_16_base/bin:\$PATH" >> /home/postgres/.bashrc
# echo "export PATH=/home/postgres/tmp_polardb_pg_17_base/bin:\$PATH" >> /home/postgres/.bashrc
# cd /home/$USER_NAME
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
下载 PolarDB for PostgreSQL 源码
git clone -b POLARDB_15_STABLE https://github.com/ApsaraDB/PolarDB-for-PostgreSQL.git
cd PolarDB-for-PostgreSQL/
编译
[root@openeuler22 PolarDB-for-PostgreSQL]# ./build.sh --help
build.sh is a script to compile and initialize PolarDB demo cluster.
Usage:
--prefix=<prefix for PolarDB installation>
--port=<port to run PolarDB on>, specifies which port to run PolarDB on
--debug=[on|off], specifies whether to compile PolarDB with debug mode (affecting compiler flags)
-m --minimal compile with minimal extention set
--jobs=<jobs number for compile>, specifies CPU cores number for compiling
--quiet=[on|off], configure with quiet mode or not, default on. more info for debug if off
--clean, stop and clean existing cluster
--nc,--nocompile, prevents recompile PolarDB
--ni,--noinit, prevents init PolarDB cluster
--ws,--withstandby init the database with standby
--wr,--withreplica init the database with replica
--ec,--extra-configure=<configure flag>, pass extra flag to configure
--ei,--extra-initdb=<initdb flag>, pass extra flag to initdb
Please lookup the following secion to find the default values for above options.
Typical command patterns to kick off this script:
1) To just cleanup, re-compile, re-init PolarDB, -m is recommanded:
build.sh -m
2) To run with specific port, standby and replica
build.sh --port=5432 --ws=1 --wr=1
./build.sh --prefix=/polardb --port=5432 --debug=on --jobs=8 --ni
编译之后的代码在 /polardb 目录下
[root@openeuler22 PolarDB-for-PostgreSQL]# ./build.sh --prefix=/polardb --port=5432 --debug=on --jobs=8 --ni
Begin clean existing installation, may raising errors, ignore them
You need to run the 'configure' program first. See the file
'README.git' for installation instructions, or visit:
<https://www.postgresql.org/docs/devel/installation.html>
make: *** [Makefile:19: maintainer-clean] Error 1
Begin configure, flag: --enable-depend --with-uuid=e2fs --disable-rpath --with-segsize=128 --with-openssl --enable-nls --with-libxml --with-libxslt --with-icu --with-pam --with-gssapi --with-ldap --with-perl --with-python --with-tcl --with-llvm --with-lz4 --with-zstd --with-system-tzdata=/usr/share/zoneinfo --with-libunwind -q --prefix=/polardb/tmp_polardb_pg_15_base --with-pgport=5432
Begin compile and install PolarDB, flag: -j8 -s
Makefile:42: warning: overriding recipe for target 'check'
../../src/makefiles/pgxs.mk:451: warning: ignoring old recipe for target 'check'
Skip init PolarDB cluster
[root@openeuler22 PolarDB-for-PostgreSQL]# ll /polardb/
total 4
drwxr-xr-x 6 root root 4096 Aug 28 17:51 tmp_polardb_pg_15_base
[root@openeuler22 PolarDB-for-PostgreSQL]# ll /polardb/tmp_polardb_pg_15_base/
total 16
drwxr-xr-x 2 root root 4096 Aug 28 17:54 bin
drwxr-xr-x 4 root root 4096 Aug 28 17:51 include
drwxr-xr-x 4 root root 4096 Aug 28 17:52 lib
drwxr-xr-x 5 root root 4096 Aug 28 17:54 share
初始化数据库并测试数据库可以正常运行
./bin/initdb -U postgres -D ./data --lc-collate='C' --lc-ctype='C' -E UTF8
mkdir -p ./data/polar_cache_trash
bin/pg_ctl -D ./data -l logfile start
[postgres@openeuler22 polardb_pg_15.13]ps -ef | grep post
root 247 67 0 09:49 pts/1 00:00:00 su - postgres
postgres 248 247 0 09:49 pts/1 00:00:00 -bash
postgres 330 1 0 09:49 ? 00:00:00 /polardb/polardb_pg_15.13/bin/postgres -D data
postgres 331 330 0 09:49 ? 00:00:00 postgres(5432): checkpointer
postgres 332 330 0 09:49 ? 00:00:00 postgres(5432): background writer
postgres 334 330 0 09:49 ? 00:00:00 postgres(5432): walwriter
postgres 335 330 0 09:49 ? 00:00:00 postgres(5432): autovacuum launcher
postgres 336 330 0 09:49 ? 00:00:00 postgres(5432): polar resource manager
postgres 337 330 0 09:49 ? 00:00:00 postgres(5432): logical replication launcher
postgres 338 248 0 09:50 pts/1 00:00:00 ps -ef
postgres 339 248 0 09:50 pts/1 00:00:00 grep --color=auto post
[postgres@openeuler22 polardb_pg_15.13]$ ./bin/psql -Upostgres -d postgres
psql (PostgreSQL 15.13 (PolarDB 15.13.4.0 build 1c8d76ee) on x86_64-linux-gnu)
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
---------------+----------+----------+---------+-------+------------+-----------------+-----------------------
polardb_admin | postgres | UTF8 | C | C | | libc | =T/postgres +
| | | | | | | postgres=CTc/postgres
postgres | postgres | UTF8 | C | C | | libc |
template0 | postgres | UTF8 | C | C | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
(4 rows)
* openEuler 22.03-LTS-SP3 环境
postgres=# \q
[postgres@openeuler22 polardb_pg_15.13]$ ldd ./bin/psql
linux-vdso.so.1 (0x00007ffe73f7e000)
libpq.so.5 => /polardb/polardb_pg_15.13/./bin/../lib/libpq.so.5 (0x000074df8fb76000)
libreadline.so.8 => /usr/lib64/libreadline.so.8 (0x000074df8fb1a000)
libm.so.6 => /usr/lib64/libm.so.6 (0x000074df8fa3f000)
libc.so.6 => /usr/lib64/libc.so.6 (0x000074df8f83e000)
libssl.so.1.1 => /usr/lib64/libssl.so.1.1 (0x000074df8f7a3000)
libcrypto.so.1.1 => /usr/lib64/libcrypto.so.1.1 (0x000074df8f4b4000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x000074df8f45f000)
libldap.so.2 => /usr/lib64/libldap.so.2 (0x000074df8f3fb000)
libtinfo.so.6 => /usr/lib64/libtinfo.so.6 (0x000074df8f3c8000)
/lib64/ld-linux-x86-64.so.2 (0x000074df8fbcc000)
libz.so.1 => /usr/lib64/libz.so.1 (0x000074df8f3ae000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x000074df8f2c7000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x000074df8f2ad000)
libcom_err.so.2 => /usr/lib64/libcom_err.so.2 (0x000074df8f2a7000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x000074df8f295000)
libkeyutils.so.1 => /usr/lib64/libkeyutils.so.1 (0x000074df8f28e000)
libresolv.so.2 => /usr/lib64/libresolv.so.2 (0x000074df8f27b000)
liblber.so.2 => /usr/lib64/liblber.so.2 (0x000074df8f269000)
libsasl2.so.3 => /usr/lib64/libsasl2.so.3 (0x000074df8f249000)
libselinux.so.1 => /usr/lib64/libselinux.so.1 (0x000074df8f21d000)
libcrypt.so.1 => /usr/lib64/libcrypt.so.1 (0x000074df8f1dd000)
libpcre2-8.so.0 => /usr/lib64/libpcre2-8.so.0 (0x000074df8f142000)
编译 pg_repack
下载并解压 pg_repack 包
- 参考:
https://reorg.github.io/pg_repack/
http://pgxn.org/dist/pg_repack/
wget https://api.pgxn.org/dist/pg_repack/1.5.2/pg_repack-1.5.2.zip
unzip pg_repack-1.5.2.zip
cd pg_repack-1.5.2
export PATH=/polardb/tmp_polardb_pg_15_base/bin:$PATH
export PG_CONFIG=/polardb/tmp_polardb_pg_15_base/bin/pg_config
make
make install
检查是否可以正常创建 pg_repack 扩展
- 构造数据
[root@openeuler22 ~]# /polardb_debug/tmp_polardb_pg_15_base/bin/psql -Upostgres
psql (PostgreSQL 15.13 (PolarDB 15.13.4.0 build 1c8d76ee debug) on x86_64-linux-gnu)
Type "help" for help.
postgres=# create extension pg_repack ;
CREATE EXTENSION
postgres=# \dx pg_repack
List of installed extensions
Name | Version | Schema | Description
-----------+---------+--------+--------------------------------------------------------------
pg_repack | 1.5.2 | public | Reorganize tables in PostgreSQL databases with minimal locks
(1 row)
create table test(id bigserial primary key, info text);
insert into test(info) select n||'info' from generate_series(1,1000000)n;
update test set info='xxx' ;
- 开始清理
pg_repack -U postgres -d postgres -t test -D -k -j2
[root@openeuler22 pg_repack-1.5.2]# /polardb_debug/tmp_polardb_pg_15_base/bin/pg_repack -U postgres -d postgres -t test -k -D -j2
NOTICE: Setting up workers.conns
INFO: repacking table "public.test"
经过测试, 发现 pg_repack-1.5.2 基于 openEuler22.03-LTS-SP4 编译存在bug , 需要修改如下地方
将 relhasoids 改为 false 之后, 再编译 pg_repack

编译 PostGIS
安装基础包(安装 libtiff, libcurl,mpfr 等库(proj会依赖该库))
# dnf groupinstall "Development Tools" -y
. dnf groupinstall "Development Tools" -y
dnf install -y git cmake make gcc gcc-c++ wget unzip \
autoconf automake libtool pkgconfig \
sqlite-devel libtiff-devel mpfr-devel libcurl-devel \
json-c-devel libxml2-devel protobuf-devel protobuf-c-devel \
libjpeg-devel curl-devel expat-devel \
python3-devel python3-pip
编译 proj 8.2.1
mkdir -p /usr/local/src
cd /usr/local/src
wget https://download.osgeo.org/proj/proj-8.2.1.tar.gz
tar -xzf proj-8.2.1.tar.gz
cd proj-8.2.1
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/proj-8.2.1
make -j$(nproc) && make install
编译 GEOS 3.12.1
cd /usr/local/src
wget https://download.osgeo.org/geos/geos-3.12.1.tar.bz2
tar -xjf geos-3.12.1.tar.bz2
cd geos-3.12.1 && ./configure --prefix=/usr/local/geos-3.12.1 && make -j$(nproc) && make install
编译 GDAL 3.8.0
安装指导参考: https://gdal.org/build_hints.html
必须项如下:

cd /usr/local/src
wget https://download.osgeo.org/gdal/3.8.0/gdal-3.8.0.tar.gz
tar -xzf gdal-3.8.0.tar.gz
cd gdal-3.8.0
mkdir build
cd build
cmake .. -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local/gdal-3.8.0 \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=/usr/local/proj-8.2.1
cmake --build . -j $(nproc) && cmake --build . --target install -j $(nproc)
#################### 说明 ####################
# 编译成动态库
-DBUILD_SHARED_LIBS=ON \
# 配置装路径
-DCMAKE_INSTALL_PREFIX=/usr/local/gdal-3.8.0 \
# 编译成 relase 版本
-DCMAKE_BUILD_TYPE=Release \
# 更通用,CMake 自动解析
-DCMAKE_PREFIX_PATH=/usr/local/proj-8.2.1
# 或者 -DPROJ_DIR=/usr/local/proj-8.2.1
# 如下方式已不推荐
# -DPROJ_INCLUDE_DIR=/usr/local/proj-8.2.1/include \
# -DPROJ_LIBRARY=/usr/local/proj-8.2.1/lib64/libproj.so \
/*
.
.
.
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/src/gdal-3.8.0/build
*/
编译 PostGIS 3.4.1
-
下载
https://download.osgeo.org/postgis/source/
wget https://download.osgeo.org/postgis/source/postgis-3.4.1.tar.gz -
编译安装
cd /usr/local/src
wget https://download.osgeo.org/postgis/source/postgis-3.4.1.tar.gz
tar xf postgis-3.4.1.tar.gz
cd postgis-3.4.1
#export PATH
export LD_LIBRARY_PATH=/usr/local/geos-3.12.1/lib64:/usr/local/proj-8.2.1/lib64:/usr/local/gdal-3.8.0/lib64:$LD_LIBRARY_PATH
./configure \
--with-pgconfig=/polardb/tmp_polardb_pg_15_base/bin/pg_config \
--with-projdir=/usr/local/proj-8.2.1 \
--with-geosconfig=/usr/local/geos-3.12.1/bin/geos-config \
--with-gdalconfig=/usr/local/gdal-3.8.0/bin/gdal-config \
LDFLAGS="-L/usr/local/proj-8.2.1/lib64 -L/usr/local/geos-3.12.1/lib64 -L/usr/local/gdal-3.8.0/lib64" \
CPPFLAGS="-I/usr/local/proj-8.2.1/include -I/usr/local/geos-3.12.1/include -I/usr/local/gdal-3.8.0/include"
make clean && make all -j $(nproc) && make install
打印信息
export LD_LIBRARY_PATH=/usr/local/geos-3.12.1/lib64:/usr/local/proj-8.2.1/lib64:/usr/local/gdal-3.8.0/lib64:$LD_LIBRARY_PATH
./configure \
--with-pgconfig=/polardb/tmp_polardb_pg_15_base/bin/pg_config \
--with-projdir=/usr/local/proj-8.2.1 \
--with-geosconfig=/usr/local/geos-3.12.1/bin/geos-config \
--with-gdalconfig=/usr/local/gdal-3.8.0/bin/gdal-config \
LDFLAGS="-L/usr/local/proj-8.2.1/lib64 -L/usr/local/geos-3.12.1/lib64 -L/usr/local/gdal-3.8.0/lib64" \
CPPFLAGS="-I/usr/local/proj-8.2.1/include -I/usr/local/geos-3.12.1/include -I/usr/local/gdal-3.8.0/include"
PostGIS is now configured for x86_64-pc-linux-gnu
-------------- Compiler Info -------------
C compiler: gcc -std=gnu99 -g -O2 -fno-math-errno -fno-signed-zeros -Wall
C++ compiler (Wagyu): gcc -std=c++11 -x c++
C++ compiler (FlatGeobuf): gcc -std=c++11 -x c++
CPPFLAGS: -I/usr/local/geos-3.12.1/include -I/usr/local/proj-8.2.1/include -I/usr/include/libxml2 -I/usr/include/json-c -DNDEBUG -I/usr/local/proj-8.2.1/include -I/usr/local/geos-3.12.1/include -I/usr/local/gdal-3.8.0/include
LDFLAGS: -L/usr/local/proj-8.2.1/lib64 -L/usr/local/geos-3.12.1/lib64 -L/usr/local/gdal-3.8.0/lib64 -lm
SQL preprocessor: /usr/bin/cpp -traditional-cpp -w -P -Upixel -Ubool
Archiver: gcc-ar rs
-------------- Additional Info -------------
Interrupt Tests: ENABLED
-------------- Dependencies --------------
GEOS config: /usr/local/geos-3.12.1/bin/geos-config
GEOS version: 3.12.1
GDAL config: /usr/local/gdal-3.8.0/bin/gdal-config
GDAL version: 3.8.0
PostgreSQL config: /polardb_debug/tmp_polardb_pg_15_base/bin/pg_config
PostgreSQL version: PostgreSQL 15.13 (PolarDB 15.13.4.0 build 1c8d76ee debug) on x86_64-linux-gnu
PROJ4 version: 82
Libxml2 config: /usr/bin/xml2-config
Libxml2 version: 2.9.14
JSON-C support: yes
protobuf support: yes
protobuf-c version: 1004000
PCRE support: Version 2
Perl: /usr/bin/perl
--------------- Extensions ---------------
PostgreSQL EXTENSION support: enabled
PostGIS Raster: enabled
PostGIS Topology: enabled
SFCGAL support: disabled
Address Standardizer support: enabled
-------- Documentation Generation --------
xsltproc: /usr/bin/xsltproc
xsl style sheets:
dblatex:
convert:
mathml2.dtd: http://www.w3.org/Math/DTD/mathml2/mathml2.dtd
configure: WARNING:
configure: WARNING: | You are building using --with-projdir. This option isn't standard and |
configure: WARNING: | might be incompatible with future releases of PROJ. |
configure: WARNING: | You can instead adjust the PKG_CONFIG_PATH environment variable if you |
configure: WARNING: | installed software in a non-standard prefix. |
configure: WARNING: | Alternatively, you may set the environment variables PROJ_CFLAGS and |
configure: WARNING: | PROJ_LIBS to avoid the need to call pkg-config. |
[root@openeuler22 postgis-3.4.1]#
[root@openeuler22 postgis-3.4.1]# make -j $(nproc) && make install
...
.
.
.
/usr/bin/install -c -m 644 address_standardizer.control address_standardizer_data_us.control sql/address_standardizer--1.0--3.4.1.sql sql/address_standardizer--3.4.1.sql sql/address_standardizer--ANY--3.4.1.sql sql/address_standardizer--TEMPLATED--TO--ANY.sql sql/address_standardizer_data_us--3.4.1--3.4.1next.sql sql/address_standardizer_data_us--3.4.1.sql sql/address_standardizer_data_us--3.4.1next--3.4.1.sql sql/address_standardizer_data_us--ANY--3.4.1.sql '/polardb_debug/tmp_polardb_pg_15_base/share/postgresql/extension/'
/usr/bin/install -c -m 644 ./README.address_standardizer '/polardb_debug/tmp_polardb_pg_15_base/share/doc/postgresql/extension/'
/usr/bin/mkdir -p '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode/address_standardizer-3'
/usr/bin/mkdir -p '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/
/usr/bin/install -c -m 644 address_parser.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 address_standardizer.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 std_pg_hash.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 analyze.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 err_param.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 export.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 gamma.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 hash.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 lexicon.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 pagc_tools.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 parseaddress-api.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 standard.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
/usr/bin/install -c -m 644 tokenize.bc '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode'/address_standardizer-3/./
cd '/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/bitcode' && /usr/bin/llvm-lto -thinlto -thinlto-action=thinlink -o address_standardizer-3.index.bc address_standardizer-3/address_parser.bc address_standardizer-3/address_standardizer.bc address_standardizer-3/std_pg_hash.bc address_standardizer-3/analyze.bc address_standardizer-3/err_param.bc address_standardizer-3/export.bc address_standardizer-3/gamma.bc address_standardizer-3/hash.bc address_standardizer-3/lexicon.bc address_standardizer-3/pagc_tools.bc address_standardizer-3/parseaddress-api.bc address_standardizer-3/standard.bc address_standardizer-3/tokenize.bc
make[2]: Leaving directory '/usr/local/src/postgis-3.4.1/extensions/address_standardizer'
make[1]: Leaving directory '/usr/local/src/postgis-3.4.1/extensions'
make[1]: Entering directory '/usr/local/src/postgis-3.4.1'
make -C extensions/ install-extension-upgrades-from-known-versions
make[2]: Entering directory '/usr/local/src/postgis-3.4.1/extensions'
for DIR in postgis postgis_tiger_geocoder postgis_raster postgis_topology address_standardizer; do \
echo "---- Making install-extension-upgrades-from-known-versions in ${DIR}"; \
make -C "${DIR}" install-extension-upgrades-from-known-versions || exit 1; \
done
---- Making install-extension-upgrades-from-known-versions in postgis
make[3]: Entering directory '/usr/local/src/postgis-3.4.1/extensions/postgis'
/usr/bin/perl ../../loader/postgis.pl \
install-extension-upgrades \
--extension postgis \
--pg_sharedir /polardb_debug/tmp_polardb_pg_15_base/share/postgresql \
2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.3.10 2.3.11 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.4.10 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.0.10 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.1.10 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.4.0
Installation target: /polardb_debug/tmp_polardb_pg_15_base/share/postgresql postgis
make[3]: Leaving directory '/usr/local/src/postgis-3.4.1/extensions/postgis'
---- Making install-extension-upgrades-from-known-versions in postgis_tiger_geocoder
make[3]: Entering directory '/usr/local/src/postgis-3.4.1/extensions/postgis_tiger_geocoder'
/usr/bin/perl ../../loader/postgis.pl \
install-extension-upgrades \
--extension postgis_tiger_geocoder \
--pg_sharedir /polardb_debug/tmp_polardb_pg_15_base/share/postgresql \
2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.3.10 2.3.11 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.4.10 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.0.10 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.1.10 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.4.0
Installation target: /polardb_debug/tmp_polardb_pg_15_base/share/postgresql postgis_tiger_geocoder
make[3]: Leaving directory '/usr/local/src/postgis-3.4.1/extensions/postgis_tiger_geocoder'
---- Making install-extension-upgrades-from-known-versions in postgis_raster
make[3]: Entering directory '/usr/local/src/postgis-3.4.1/extensions/postgis_raster'
/usr/bin/perl ../../loader/postgis.pl \
install-extension-upgrades \
--extension postgis_raster \
--pg_sharedir /polardb_debug/tmp_polardb_pg_15_base/share/postgresql \
2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.3.10 2.3.11 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.4.10 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.0.10 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.1.10 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.4.0
Installation target: /polardb_debug/tmp_polardb_pg_15_base/share/postgresql postgis_raster
make[3]: Leaving directory '/usr/local/src/postgis-3.4.1/extensions/postgis_raster'
---- Making install-extension-upgrades-from-known-versions in postgis_topology
make[3]: Entering directory '/usr/local/src/postgis-3.4.1/extensions/postgis_topology'
/usr/bin/perl ../../loader/postgis.pl \
install-extension-upgrades \
--extension postgis_topology \
--pg_sharedir /polardb_debug/tmp_polardb_pg_15_base/share/postgresql \
2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.3.10 2.3.11 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.4.10 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.0.10 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.1.10 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.4.0
Installation target: /polardb_debug/tmp_polardb_pg_15_base/share/postgresql postgis_topology
make[3]: Leaving directory '/usr/local/src/postgis-3.4.1/extensions/postgis_topology'
---- Making install-extension-upgrades-from-known-versions in address_standardizer
make[3]: Entering directory '/usr/local/src/postgis-3.4.1/extensions/address_standardizer'
Makefile:230: warning: overriding recipe for target 'install'
/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/pgxs/src/makefiles/pgxs.mk:236: warning: ignoring old recipe for target 'install'
TARGET=`echo install-extension-upgrades-from-known-versions-data | sed 's/-data$//'`; \
for lang in us; do \
EXTENSION_DATA_INSTALL=1 \
make ${TARGET} \
EXTENSION=address_standardizer_data_${lang} \
|| exit 1; \
done
make[4]: Entering directory '/usr/local/src/postgis-3.4.1/extensions/address_standardizer'
Makefile:230: warning: overriding recipe for target 'install'
/polardb_debug/tmp_polardb_pg_15_base/lib/postgresql/pgxs/src/makefiles/pgxs.mk:236: warning: ignoring old recipe for target 'install'
/usr/bin/perl ../../loader/postgis.pl \
install-extension-upgrades \
--extension address_standardizer_data_us \
--pg_sharedir /polardb_debug/tmp_polardb_pg_15_base/share/postgresql \
2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.3.10 2.3.11 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.4.10 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.0.10 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.1.10 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.4.0
Installation target: /polardb_debug/tmp_polardb_pg_15_base/share/postgresql address_standardizer_data_us
make[4]: Leaving directory '/usr/local/src/postgis-3.4.1/extensions/address_standardizer'
/usr/bin/perl ../../loader/postgis.pl \
install-extension-upgrades \
--extension address_standardizer \
--pg_sharedir /polardb_debug/tmp_polardb_pg_15_base/share/postgresql \
2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.3.10 2.3.11 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.4.10 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.0.10 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.1.10 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.4.0
Installation target: /polardb_debug/tmp_polardb_pg_15_base/share/postgresql address_standardizer
make[3]: Leaving directory '/usr/local/src/postgis-3.4.1/extensions/address_standardizer'
make[2]: Leaving directory '/usr/local/src/postgis-3.4.1/extensions'
make[1]: Leaving directory '/usr/local/src/postgis-3.4.1'
[root@openeuler22 postgis-3.4.1]#
编译 PgRouting
安装 boost 包
如果编译报错如下, 说明缺少 boost 包,
意思是:编译 **pgRouting 3.6.0** 时,CMake 找不到 Boost 的头文件目录(`Boost_INCLUDE_DIR`),而 pgRouting 至少需要 **Boost 1.56**。
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Boost (missing: Boost_INCLUDE_DIR) (Required is at least
version "1.56.0")
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake/Modules/FindBoost.cmake:2360 (find_package_handle_standard_args)
CMakeLists.txt:83 (find_package)
sudo dnf install -y boost-devel
编译安装 pgrouting
cd /usr/local/src
wget https://github.com/pgRouting/pgrouting/archive/refs/tags/v3.6.0.tar.gz
tar -xzf v3.6.0.tar.gz
cd pgrouting-3.6.0
mkdir build && cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local/pgrouting-3.6.0 \
-DPOSTGRESQL_PG_CONFIG=/polardb_debug/tmp_polardb_pg_15_base/bin/pg_config \
-DWITH_DD=OFF
make -j$(nproc)
sudo make install
验证 postgis 与 pgrouting 插件功能
-- 1. 创建扩展
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE EXTENSION IF NOT EXISTS pgrouting;
-- 2. 验证PostGIS功能
-- 创建包含几何类型的表
CREATE TABLE IF NOT EXISTS test_postgis (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
geom GEOMETRY(POINT, 4326) -- 使用WGS84坐标系的点类型
);
-- 插入测试数据
INSERT INTO test_postgis (name, geom) VALUES
('Point 1', ST_GeomFromText('POINT(116.3975 39.9085)', 4326)), -- 北京坐标
('Point 2', ST_GeomFromText('POINT(121.4737 31.2304)', 4326)); -- 上海坐标
-- 查询验证数据是否正确插入
SELECT id, name, ST_AsText(geom) as coordinates FROM test_postgis;
-- 验证空间函数是否正常工作
SELECT name, ST_X(geom) as longitude, ST_Y(geom) as latitude FROM test_postgis;
-- 3. 验证PgRouting功能
-- 创建路网表(edges)
CREATE TABLE IF NOT EXISTS test_network (
id SERIAL PRIMARY KEY,
source INTEGER,
target INTEGER,
cost FLOAT,
reverse_cost FLOAT,
geom GEOMETRY
);
-- 插入测试路网数据
INSERT INTO test_network (source, target, cost, reverse_cost, geom) VALUES
(1, 2, 1.0, 1.0, ST_GeomFromText('LINESTRING(116.3975 39.9085, 121.4737 31.2304)', 4326));
-- 使用pgrouting函数验证功能
SELECT * FROM pgr_version(); -- 查看PgRouting版本信息
-- 创建节点表
SELECT pgr_createVerticesTable('test_network', 'geom');
-- 创建边表
SELECT pgr_createTopology('test_network', 0.001, 'geom');
-- 验证拓扑结构是否正确创建
SELECT COUNT(*) as node_count FROM test_network_vertices_pgr;
SELECT id, source, target, cost FROM test_network;
-- 清理测试数据
DROP TABLE IF EXISTS test_postgis;
DROP TABLE IF EXISTS test_network;
DROP TABLE IF EXISTS test_network_vertices_pgr;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




