1、目录规划

介质目录: /root

程序目录: /usr/local/pgsql

数据目录: /usr/local/pgsql/pgdata

日志目录: /usr/local/pgsql/pglog

归档目录: /usr/local/pgsql/archive


2、创建相关目录

mkdir -p /usr/local/pgsql

mkdir -p /usr/local/pgsql/pgdata

mkdir -p /usr/local/pgsql/pglog

mkdir -p /usr/local/pgsql/pgarch




3、创建Postgres用户

useradd -u 2000 postgres

echo postgres | passwd --stdin postgres




4、解压安装介质

cd ~

tar zxf postgresql-12.12.tar.gz -C /usr/local/pgsql




5、配置YUM仓库

挂载系统介质并配置yum

确保虚拟机光驱是连接状态


mount /dev/sr0 /mnt




备份当前yum


cd /etc/yum.repos.d/

mkdir bak

mv *.repo bak/


编辑repo配置文件,加入如下内容


cat > /etc/yum.repos.d/local.repo <<EOF

[base]

name=base

baseurl=file:///mnt

enabled=1

gpgcheck=0

multilib_policy=all

EOF




yum clean all && yum makecache && yum update && yum repolist




6、安装依赖包

yum install -y libicu-devel zlib-devel readline readline-devel perl-ExtUtils-Embed perl-ExtUtils-MakeMaker pam-devel openssl-devel openldap-devel libxml2-devel libxslt-devel systemd-devel tcl-devel gcc net-tools Python python-devel


7、编译前检查

cd /usr/local/pgsql/postgresql-12.12/ && mv * ..

cd .. && rm -rf postgresql-12.12 && ls




export PREFIX=/usr/local/pgsql

export PGPORT=5432

./configure


[root@localhost pgsql]# ./configure


checking build system type... x86_64-pc-Linux-gnu


checking host system type... x86_64-pc-linux-gnu


checking which template to use... linux


checking whether NLS is wanted... no


checking for default port number... 5432


checking for block size... 8kB


checking for segment size... 1GB


checking for WAL block size... 8kB


checking for gcc... gcc


checking whether the C compiler works... yes


checking for C compiler default output file name... a.out


checking for suffix of executables...


checking whether we are cross compiling... no


checking for suffix of object files... o


checking whether we are using the GNU C compiler... yes


checking whether gcc accepts -g... yes


checking for gcc option to accept ISO C89... none needed


checking for gcc option to accept ISO C99... -std=gnu99


checking for g++... no


checking for c++... no


checking whether we are using the GNU C++ compiler... no


checking whether g++ accepts -g... no


checking for gawk... gawk


checking whether gcc -std=gnu99 supports -Wdeclaration-after-statement, for CFLAGS... yes


checking whether gcc -std=gnu99 supports -Werror=vla, for CFLAGS... yes


checking whether gcc -std=gnu99 supports -Wendif-labels, for CFLAGS... yes


checking whether g++ supports -Wendif-labels, for CXXFLAGS... no


checking whether gcc -std=gnu99 supports -Wmissing-format-attribute, for CFLAGS... yes


checking whether g++ supports -Wmissing-format-attribute, for CXXFLAGS... no


checking whether gcc -std=gnu99 supports -Wformat-security, for CFLAGS... yes


checking whether g++ supports -Wformat-security, for CXXFLAGS... no


checking whether gcc -std=gnu99 supports -fno-strict-aliasing, for CFLAGS... yes


checking whether g++ supports -fno-strict-aliasing, for CXXFLAGS... no


checking whether gcc -std=gnu99 supports -fwrapv, for CFLAGS... yes


checking whether g++ supports -fwrapv, for CXXFLAGS... no


checking whether gcc -std=gnu99 supports -fexcess-precision=standard, for CFLAGS... yes


checking whether g++ supports -fexcess-precision=standard, for CXXFLAGS... no


checking whether gcc -std=gnu99 supports -funroll-loops, for CFLAGS_VECTOR... yes


checking whether gcc -std=gnu99 supports -ftree-vectorize, for CFLAGS_VECTOR... yes


checking whether gcc -std=gnu99 supports -Wunused-command-line-argument, for NOT_THE_CFLAGS... no


checking whether gcc -std=gnu99 supports -Wcompound-token-split-by-macro, for NOT_THE_CFLAGS... no


checking whether gcc -std=gnu99 supports -Wformat-truncation, for NOT_THE_CFLAGS... no


checking whether gcc -std=gnu99 supports -Wstringop-truncation, for NOT_THE_CFLAGS... no


checking whether the C compiler still works... yes


checking how to run the C preprocessor... gcc -std=gnu99 -E


checking for pkg-config... /usr/bin/pkg-config


checking pkg-config is at least version 0.9.0... yes


checking allow thread-safe client libraries... yes


checking whether to build with ICU support... no


checking whether to build with Tcl... no


checking whether to build Perl modules... no


checking whether to build Python modules... no


checking whether to build with GSSAPI support... no


checking whether to build with PAM support... no


checking whether to build with BSD Authentication support... no


checking whether to build with LDAP support... no


checking whether to build with Bonjour support... no


checking whether to build with OpenSSL support... no


checking whether to build with SELinux support... no


checking whether to build with systemd support... no


checking whether to build with XML support... no


checking for grep that handles long lines and -e... /usr/bin/grep


checking for egrep... /usr/bin/grep -E


checking for ld used by GCC... /usr/bin/ld


checking if the linker (/usr/bin/ld) is GNU ld... yes


checking for ranlib... ranlib


checking for strip... strip


checking whether it is possible to strip libraries... yes


checking for ar... ar


checking for a BSD-compatible install... /usr/bin/install -c


checking for tar... /usr/bin/tar


checking whether ln -s works... yes


checking for a thread-safe mkdir -p... /usr/bin/mkdir -p


checking for bison... no


configure: WARNING:


*** Without Bison you will not be able to build PostgreSQL from Git nor


*** change any of the parser definition files.  You can obtain Bison from


*** a GNU mirror site.  (If you are using the official distribution of


*** PostgreSQL then you do not need to worry about this, because the Bison


*** output is pre-generated.)


checking for flex... no


configure: WARNING:


*** Without Flex you will not be able to build PostgreSQL from Git nor


*** change any of the scanner definition files.  You can obtain Flex from


*** a GNU mirror site.  (If you are using the official distribution of


*** PostgreSQL then you do not need to worry about this because the Flex


*** output is pre-generated.)


checking for perl... /usr/bin/perl


configure: using perl 5.16.3


checking for a sed that does not truncate output... /usr/bin/sed


checking for ANSI C header files... yes


checking for sys/types.h... yes


checking for sys/stat.h... yes


checking for stdlib.h... yes


checking for string.h... yes


checking for memory.h... yes


checking for strings.h... yes


checking for inttypes.h... yes


checking for stdint.h... yes


checking for unistd.h... yes


checking whether gcc -std=gnu99 is Clang... no


checking whether pthreads work with -pthread... yes


checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE


checking whether more special flags are required for pthreads... no


checking for PTHREAD_PRIO_INHERIT... yes


checking pthread.h usability... yes


checking pthread.h presence... yes


checking for pthread.h... yes


checking for strerror_r... yes


checking for getpwuid_r... yes


checking for gethostbyname_r... yes


checking whether strerror_r returns int... no


checking for main in -lm... yes


checking for library containing setproctitle... no


checking for library containing dlsym... -ldl


checking for library containing socket... none required


checking for library containing shl_load... no


checking for library containing getopt_long... none required


checking for library containing crypt... -lcrypt


checking for library containing shm_open... -lrt


checking for library containing shm_unlink... none required


checking for library containing clock_gettime... none required


checking for library containing fdatasync... none required


checking for library containing sched_yield... none required


checking for library containing gethostbyname_r... none required


checking for library containing shmget... none required


checking for library containing readline... -lreadline


checking for inflate in -lz... yes


checking for stdbool.h that conforms to C99... yes


checking for _Bool... yes


checking atomic.h usability... no


checking atomic.h presence... no


checking for atomic.h... no


checking copyfile.h usability... no


checking copyfile.h presence... no


checking for copyfile.h... no


checking crypt.h usability... yes


checking crypt.h presence... yes


checking for crypt.h... yes


checking fp_class.h usability... no


checking fp_class.h presence... no


checking for fp_class.h... no


checking getopt.h usability... yes


checking getopt.h presence... yes


checking for getopt.h... yes


checking ieeefp.h usability... no


checking ieeefp.h presence... no


checking for ieeefp.h... no


checking ifaddrs.h usability... yes


checking ifaddrs.h presence... yes


checking for ifaddrs.h... yes


checking langinfo.h usability... yes


checking langinfo.h presence... yes


checking for langinfo.h... yes


checking mbarrier.h usability... no


checking mbarrier.h presence... no


checking for mbarrier.h... no


checking poll.h usability... yes


checking poll.h presence... yes


checking for poll.h... yes


checking sys/epoll.h usability... yes


checking sys/epoll.h presence... yes


checking for sys/epoll.h... yes


checking sys/ipc.h usability... yes


checking sys/ipc.h presence... yes


checking for sys/ipc.h... yes


checking sys/prctl.h usability... yes


checking sys/prctl.h presence... yes


checking for sys/prctl.h... yes


checking sys/procctl.h usability... no


checking sys/procctl.h presence... no


checking for sys/procctl.h... no


checking sys/pstat.h usability... no


checking sys/pstat.h presence... no


checking for sys/pstat.h... no


checking sys/resource.h usability... yes


checking sys/resource.h presence... yes


checking for sys/resource.h... yes


checking sys/select.h usability... yes


checking sys/select.h presence... yes


checking for sys/select.h... yes


checking sys/sem.h usability... yes


checking sys/sem.h presence... yes


checking for sys/sem.h... yes


checking sys/shm.h usability... yes


checking sys/shm.h presence... yes


checking for sys/shm.h... yes


checking sys/sockio.h usability... no


checking sys/sockio.h presence... no


checking for sys/sockio.h... no


checking sys/tas.h usability... no


checking sys/tas.h presence... no


checking for sys/tas.h... no


checking sys/un.h usability... yes


checking sys/un.h presence... yes


checking for sys/un.h... yes


checking termios.h usability... yes


checking termios.h presence... yes


checking for termios.h... yes


checking ucred.h usability... no


checking ucred.h presence... no


checking for ucred.h... no


checking utime.h usability... yes


checking utime.h presence... yes


checking for utime.h... yes


checking wchar.h usability... yes


checking wchar.h presence... yes


checking for wchar.h... yes


checking wctype.h usability... yes


checking wctype.h presence... yes


checking for wctype.h... yes


checking for net/if.h... yes


checking for sys/ucred.h... no


checking for netinet/tcp.h... yes


checking readline/readline.h usability... yes


checking readline/readline.h presence... yes


checking for readline/readline.h... yes


checking readline/history.h usability... yes


checking readline/history.h presence... yes


checking for readline/history.h... yes


checking zlib.h usability... yes


checking zlib.h presence... yes


checking for zlib.h... yes


checking whether byte ordering is bigendian... no


checking for inline... inline


checking for printf format archetype... gnu_printf


checking for flexible array members... yes


checking for signed types... yes


checking for __func__... yes


checking for _Static_assert... yes


checking for typeof... typeof


checking for __builtin_types_compatible_p... yes


checking for __builtin_constant_p... yes


checking for __builtin_unreachable... yes


checking for computed goto support... yes


checking whether struct tm is in sys/time.h or time.h... time.h


checking for struct tm.tm_zone... yes


checking for tzname... yes


checking for union semun... no


checking for struct sockaddr_un... yes


checking for struct sockaddr_storage... yes


checking for struct sockaddr_storage.ss_family... yes


checking for struct sockaddr_storage.__ss_family... no


checking for struct sockaddr_storage.ss_len... no


checking for struct sockaddr_storage.__ss_len... no


checking for struct sockaddr.sa_len... no


checking for struct addrinfo... yes


checking for intptr_t... yes


checking for uintptr_t... yes


checking for unsigned long long int... yes


checking for long long int... yes


checking for locale_t... yes


checking for C/C++ restrict keyword... __restrict


checking for struct cmsgcred... no


checking for struct option... yes


checking for z_streamp... yes


checking whether assembler supports x86_64 popcntq... yes


checking for special C compiler options needed for large files... no


checking for _FILE_OFFSET_BITS value needed for large files... no


checking size of off_t... 8


checking size of bool... 1


checking for int timezone... yes


checking types of arguments for accept()... int, int, struct sockaddr *, socklen_t *


checking whether gettimeofday takes only one argument... no


checking for wcstombs_l declaration... no


checking for cbrt... yes


checking for clock_gettime... yes


checking for copyfile... no


checking for fdatasync... yes


checking for getifaddrs... yes


checking for getpeerucred... no


checking for getrlimit... yes


checking for mbstowcs_l... no


checking for memmove... yes


checking for poll... yes


checking for posix_fallocate... yes


checking for ppoll... yes


checking for pstat... no


checking for pthread_is_threaded_np... no


checking for readlink... yes


checking for setproctitle... no


checking for setproctitle_fast... no


checking for setsid... yes


checking for shm_open... yes


checking for strchrnul... yes


checking for strsignal... yes


checking for symlink... yes


checking for sync_file_range... yes


checking for uselocale... yes


checking for utime... yes


checking for utimes... yes


checking for wcstombs_l... no


checking for __builtin_bswap16... yes


checking for __builtin_bswap32... yes


checking for __builtin_bswap64... yes


checking for __builtin_clz... yes


checking for __builtin_ctz... yes


checking for __builtin_popcount... yes


checking for __builtin_frame_address... yes


checking for fseeko... yes


checking for _LARGEFILE_SOURCE value needed for large files... no


checking how gcc -std=gnu99 reports undeclared, standard C functions... error


checking for posix_fadvise... yes


checking whether posix_fadvise is declared... yes


checking whether fdatasync is declared... yes


checking whether strlcat is declared... no


checking whether strlcpy is declared... no


checking whether strnlen is declared... yes


checking whether F_FULLFSYNC is declared... no


checking whether RTLD_GLOBAL is declared... yes


checking whether RTLD_NOW is declared... yes


checking for struct sockaddr_in6... yes


checking for PS_STRINGS... no


checking for isinf... yes


checking for crypt... yes


checking for dlopen... yes


checking for fls... no


checking for getopt... yes


checking for getrusage... yes


checking for inet_aton... yes


checking for mkdtemp... yes


checking for pread... yes


checking for pwrite... yes


checking for random... yes


checking for rint... yes


checking for srandom... yes


checking for strlcat... no


checking for strlcpy... no


checking for strnlen... yes


checking for strtof... yes


checking for setenv... yes


checking for unsetenv... yes


checking for getpeereid... no


checking for getaddrinfo... yes


checking for getopt_long... yes


checking for syslog... yes


checking syslog.h usability... yes


checking syslog.h presence... yes


checking for syslog.h... yes


checking for opterr... yes


checking for optreset... no


checking for strtoll... yes


checking for strtoull... yes


checking whether strtoll is declared... yes


checking whether strtoull is declared... yes


checking for rl_completion_append_character... yes


checking for rl_completion_matches... yes


checking for rl_filename_completion_function... yes


checking for rl_reset_screen_size... yes


checking for append_history... yes


checking for history_truncate_file... yes


checking test program... ok


checking whether long int is 64 bits... yes


checking for __builtin_mul_overflow... no


checking size of void *... 8


checking size of size_t... 8


checking size of long... 8


checking whether to build with float4 passed by value... yes


checking whether to build with float8 passed by value... yes


checking alignment of short... 2


checking alignment of int... 4


checking alignment of long... 8


checking alignment of double... 8


checking for int8... no


checking for uint8... no


checking for int64... no


checking for uint64... no


checking for __int128... yes


checking for __int128 alignment bug... ok


checking alignment of PG_INT128_TYPE... 16


checking for builtin __sync char locking functions... yes


checking for builtin __sync int32 locking functions... yes


checking for builtin __sync int32 atomic operations... yes


checking for builtin __sync int64 atomic operations... yes


checking for builtin __atomic int32 atomic operations... yes


checking for builtin __atomic int64 atomic operations... yes


checking for __get_cpuid... yes


checking for __cpuid... no


checking for _mm_crc32_u8 and _mm_crc32_u32 with CFLAGS=... no


checking for _mm_crc32_u8 and _mm_crc32_u32 with CFLAGS=-msse4.2... yes


checking for __crc32cb, __crc32ch, __crc32cw, and __crc32cd with CFLAGS=... no


checking for __crc32cb, __crc32ch, __crc32cw, and __crc32cd with CFLAGS=-march=armv8-a+crc... no


checking which CRC-32C implementation to use... SSE 4.2 with runtime check


checking for library containing sem_init... -lpthread


checking which semaphore API to use... unnamed POSIX


checking for /dev/urandom... yes


checking which random number source to use... /dev/urandom


checking for xmllint... /usr/bin/xmllint


checking for xsltproc... /usr/bin/xsltproc


checking for fop... no


checking for dbtoepub... no


checking thread safety of required library functions... yes


checking whether gcc -std=gnu99 supports -Wl,--as-needed... yes


configure: using compiler=gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)


configure: using CFLAGS=-Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2


configure: using CPPFLAGS= -D_GNU_SOURCE


configure: using LDFLAGS=  -Wl,--as-needed


configure: creating ./config.status


config.status: creating GNUmakefile


config.status: creating src/Makefile.global


config.status: creating src/include/pg_config.h


config.status: creating src/include/pg_config_ext.h


config.status: creating src/interfaces/ecpg/include/ecpg_config.h


config.status: linking src/backend/port/tas/dummy.s to src/backend/port/tas.s


config.status: linking src/backend/port/posix_sema.c to src/backend/port/pg_sema.c


config.status: linking src/backend/port/sysv_shmem.c to src/backend/port/pg_shmem.c


config.status: linking src/include/port/linux.h to src/include/pg_config_os.h


config.status: linking src/makefiles/Makefile.linux to src/Makefile.port


[root@localhost pgsql]#


8、开始编译

# make world


9、编译安装

# make install-world


10、安装扩展模块

cd /usr/local/pgsql/contrib

make

make install


11、配置环境变量

su - postgres


cat >>/home/postgres/.bashrc<<EOF


export PGHOME=/usr/local/pgsql


export LD_LIBRARY_PATH=${PGHOME}/lib:${LD_LIBRARY_PATH}


export PGDATA=${PGHOME}/pgdata


export PATH=${PGHOME}/bin:${PATH}


EOF


环境生效

source ~//.bashrc && . ~/.bashrc


12、root用户给文件重新赋权

chown -R postgres:postgres /usr/local/pgsql


13、简单初始化数据库

su - postgres

initdb -D $PGDATA -W -U postgres --指定数据文件存放目录,并指定一个用户




至此,安装完成。