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

image.png

编译 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
必须项如下:
image.png


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 3.6.0

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;
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐