Configure error readline library not found

Introduction This is an article where the main focus is about solving an error message appear when performing PostgreSQL database […]

Introduction

This is an article where the main focus is about solving an error message appear when performing PostgreSQL database installation. It is the installation where the step exist in this link. It is an article with the title of ‘How to Install PostgreSQL Database Server using compressed file in CentOS 8’. The following is the appearance of the installation process where the error message appear :

[root@10 postgresql-12.0]# ./configure --prefix=/opt/postgresql-12.0/app
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... none needed
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for gawk... gawk
checking whether gcc supports -Wdeclaration-after-statement, for CFLAGS... yes
checking whether gcc supports -Werror=vla, for CFLAGS... yes
checking whether gcc supports -Wendif-labels, for CFLAGS... yes
checking whether g++ supports -Wendif-labels, for CXXFLAGS... yes
checking whether gcc supports -Wmissing-format-attribute, for CFLAGS... yes
checking whether g++ supports -Wmissing-format-attribute, for CXXFLAGS... yes
checking whether gcc supports -Wformat-security, for CFLAGS... yes
checking whether g++ supports -Wformat-security, for CXXFLAGS... yes
checking whether gcc supports -fno-strict-aliasing, for CFLAGS... yes
checking whether g++ supports -fno-strict-aliasing, for CXXFLAGS... yes
checking whether gcc supports -fwrapv, for CFLAGS... yes
checking whether g++ supports -fwrapv, for CXXFLAGS... yes
checking whether gcc supports -fexcess-precision=standard, for CFLAGS... yes
checking whether g++ supports -fexcess-precision=standard, for CXXFLAGS... no
checking whether gcc supports -funroll-loops, for CFLAGS_VECTOR... yes
checking whether gcc supports -ftree-vectorize, for CFLAGS_VECTOR... yes
checking whether gcc supports -Wunused-command-line-argument, for NOT_THE_CFLAGS... no
checking whether gcc supports -Wformat-truncation, for NOT_THE_CFLAGS... yes
checking whether gcc supports -Wstringop-truncation, for NOT_THE_CFLAGS... yes
checking whether the C compiler still works... yes
checking how to run the C preprocessor... gcc -E
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 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.26.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 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 dlopen... -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... no
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.
[root@10 postgresql-12.0]#

The error exist as in the last part in the above output command.  Those error are in the following lines :

checking for library containing readline... no
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.
[root@10 postgresql-12.0]#

Solution

Actually, the solution is very simple. First of all, search the library with the name of ‘readline’. Execute the following command :

[root@10 postgresql-12.0]# yum search readline
Last metadata expiration check: 1:04:23 ago on Wed 16 Jun 2021 06:55:45 AM EDT.
====================================================================== Name Exactly Matched: readline ======================================================================
readline.x86_64 : A library for editing typed command lines
readline.i686 : A library for editing typed command lines
===================================================================== Name & Summary Matched: readline =====================================================================
compat-golang-github-chzyer-readline-devel.noarch : Pure Go implementation of GNU Readline-like library
golang-gopkg-readline-1-devel.noarch : Pure Go implementation of GNU Readline-like library
lua-readline.x86_64 : Lua interface to the readline and history libraries
perl-Term-ReadLine-Gnu.x86_64 : Perl extension for the GNU Readline/History Library
readline-devel.i686 : Files needed to develop programs which use the readline library
readline-devel.x86_64 : Files needed to develop programs which use the readline library
tcl-tclreadline.x86_64 : GNU Readline extension for Tcl/Tk
tcl-tclreadline-devel.x86_64 : Development files for the tclreadline library
======================================================================== Summary Matched: readline =========================================================================
editline.x86_64 : A small compatible replacement for readline
python3-readlike.noarch : Readline-like line editing module
rlwrap.x86_64 : Wrapper for GNU readline
[root@10 postgresql-12.0]#

Actually, there are several packages containing the name of ‘readline’. But there is only one package which is the suitable one for solving the problem. It is a package with the name of ‘readline-devel’. So, execute the following command to install ‘readline-devel’ :

[root@10 postgresql-12.0]# yum -y install readline-devel
Last metadata expiration check: 1:14:46 ago on Wed 16 Jun 2021 06:55:45 AM EDT.
Dependencies resolved.
============================================================================================================================================================================
 Package                                      Architecture                       Version                                           Repository                          Size
============================================================================================================================================================================
Installing:
 readline-devel                               x86_64                             7.0-10.el8                                        baseos                             204 k
Installing dependencies:
 ncurses-c++-libs                             x86_64                             6.1-7.20180224.el8                                baseos                              58 k
 ncurses-devel                                x86_64                             6.1-7.20180224.el8                                baseos                             527 k

Transaction Summary
============================================================================================================================================================================
Install  3 Packages

Total download size: 789 k
Installed size: 1.5 M
Downloading Packages:
(1/3): ncurses-c++-libs-6.1-7.20180224.el8.x86_64.rpm                                                                                       370 kB/s |  58 kB     00:00
(2/3): readline-devel-7.0-10.el8.x86_64.rpm                                                                                                 725 kB/s | 204 kB     00:00
(3/3): ncurses-devel-6.1-7.20180224.el8.x86_64.rpm                                                                                          897 kB/s | 527 kB     00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                       4.2 kB/s | 789 kB     03:06
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                    1/1
  Installing       : ncurses-c++-libs-6.1-7.20180224.el8.x86_64                                                                                                         1/3
  Installing       : ncurses-devel-6.1-7.20180224.el8.x86_64                                                                                                            2/3
  Installing       : readline-devel-7.0-10.el8.x86_64                                                                                                                   3/3
  Running scriptlet: readline-devel-7.0-10.el8.x86_64                                                                                                                   3/3
  Verifying        : ncurses-c++-libs-6.1-7.20180224.el8.x86_64                                                                                                         1/3
  Verifying        : ncurses-devel-6.1-7.20180224.el8.x86_64                                                                                                            2/3
  Verifying        : readline-devel-7.0-10.el8.x86_64                                                                                                                   3/3

Installed:
  ncurses-c++-libs-6.1-7.20180224.el8.x86_64                   ncurses-devel-6.1-7.20180224.el8.x86_64                   readline-devel-7.0-10.el8.x86_64

Complete!
[root@10 postgresql-12.0]#

After installing the ‘readline-devel’ package, just execute the command once more. The output will be very different. The following is the actual output of the execution after installing ‘readline-devel’ package :

...
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 fseeko... yes
checking for _LARGEFILE_SOURCE value needed for large files... no
checking how gcc 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 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... yes
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 DocBook XML V4.2... yes
checking for dbtoepub... no
checking for xsltproc... /usr/bin/xsltproc
checking for fop... no
checking thread safety of required library functions... yes
checking whether gcc supports -Wl,--as-needed... yes
configure: using compiler=gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5)
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 -Wno-format-truncation -Wno-stringop-truncation -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@10 postgresql-12.0]#

The execution of the command ‘./configure –prefix=postgresql_installation_path’ is a success. It is actually the part for generating Makefile script for building the installer. Just continue the installation process of PostgreSQL database server as exist in this link.

Содержание

  1. How to Solve configure: error: readline library not found when Installing PostgreSQL
  2. Introduction
  3. Solution
  4. configure: error: readline library not found #354
  5. Comments
  6. Установка PostgreSQL из исходных кодов

How to Solve configure: error: readline library not found when Installing PostgreSQL

Introduction

This is an article where the main focus is about solving an error message appear when performing PostgreSQL database installation. It is the installation where the step exist in this link. It is an article with the title of ‘How to Install PostgreSQL Database Server using compressed file in CentOS 8’. The following is the appearance of the installation process where the error message appear :

The error exist as in the last part in the above output command. Those error are in the following lines :

Solution

Actually, the solution is very simple. First of all, search the library with the name of ‘readline’. Execute the following command :

Actually, there are several packages containing the name of ‘readline’. But there is only one package which is the suitable one for solving the problem. It is a package with the name of ‘readline-devel’. So, execute the following command to install ‘readline-devel’ :

After installing the ‘readline-devel’ package, just execute the command once more. The output will be very different. The following is the actual output of the execution after installing ‘readline-devel’ package :

The execution of the command ‘./configure –prefix=postgresql_installation_path’ is a success. It is actually the part for generating Makefile script for building the installer. Just continue the installation process of PostgreSQL database server as exist in this link.

Источник

configure: error: readline library not found #354

I did the following on CentOS 7 Linux from instructions:

  • completed the prerequisites
  • cloned yugabyte-db from the github repository
  • ran: ./yb_build.sh release —with-assembly

The build failed during psql(common) build. The attached file build-error.log is a copy and paste of the display output of yb_build.sh. From the build-error.log:

psql (common) If you have readline already installed, see config.log for details on the psql (common) failure. It is possible the compiler isn’t looking in the proper directory. psql (common) Use —without-readline to disable readline support.

I have attached the console.log from yugabyte-db/thirdparty/build/common/postgresql-10.3
I installed ‘readline-devel’ with the following command:

sudo yum install readline-devel

I re-ran the yb_build.sh but got the same errors as before. I checked and found the readline.so in /usr/lib64 and a readline directory with .h files in /usr/include. The PATH is set to:

[ananyaks@centhost include]$ echo $PATH /home/ananyaks/tools/apache-maven/bin:/home/ananyaks/tools/apache-maven/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/ananyaks/.local/bin:/home/ananyaks/bin:/usr/lib64:/usr/include:/home/ananyaks/.local/bin:/home/ananyaks/bin:/usr/lib64:/usr/include

Please let me know how to fix these errors to complete the build.
build-error.log
config.log

The text was updated successfully, but these errors were encountered:

thanks for reporting @ananyaks.

hi @mbautin — can you please take a initial look?

Hi @ananyaks , can you run

/.linuxbrew-yb-build/bin/brew install readline openssl libuuid bzip2 and then try to rebuild?

Hi @ttyusupov, thank you for the additional instruction to run

/.linuxbrew-yb-build/bin/brew install readline openssl libuuid bzip2
./yb_build.sh release —with-assembly

The build got much further but did not complete successfully. The file build_output.log is a copy and paste of the displayed end output of ./yb_build.sh release —with-assembly . The error at the very end of build_output.log is

[ERROR] Failed to execute goal on project interface-annotations: Could not resolve dependencies for project org.yb:interface-annotations:jar:0.8.0-SNAPSHOT: Could not find artifact jdk.tools:jdk.tools:jar:1.8 at specified path /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre/../lib/tools.jar -> [Help 1]

From the Building the code documentation, the build does seem to have created a number of binaries in build/release-gcc-dynamic-community , and has also created the build/latest symlink. The file
binaries.txt lists the files created in build/release-gcc-dynamic-community and the file
bin.txt lists the binaries created in build/release-gcc-dynamic-community/bin .

I want to be able to bring up yugabyte-db from my build and run Java applications. If the latest build error cannot be ignored, please let me know how to resolve it. Thanks!

@ananyaks Thank you for your interest in building YugaByte DB from source. Looking at your build log, the C++ code was built successfully, so you can already start a local YugaByte DB cluster using the bin/yb-ctl command ( bin/yb-ctl create ). Please give it a try and let us know if there are any issues. The local cluster brought up that way should already be usable for app development with open-source Java drivers for Cassandra and Redis or the respective optimized YugaByte versions (see https://docs.yugabyte.com/latest/develop/client-drivers/ for more details). If you want to run YugaByte sample apps, you can do so using the yb-sample-apps.jar file found inside the pre-built tarball that you can download at https://docs.yugabyte.com/latest/quick-start/install/#linux . We will look into the Java build error shortly and you’ll be able to build the sample apps from source as well.

@ananyaks We have removed the dependency on tools.jar. Would you mind pulling the latest source and re-running the build?

Hi @mbautin I pulled the latest source and re-ran the build. The file build_output_after_pull.log is a copy and paste of the output displayed of pulling the source and running the build.

Seeing the following new error in the build_output_after_pull.log

[INFO] Changes detected — recompiling the module!
[INFO] Compiling 3 source files to /home/ananyaks/Documents/my-projects/yugabyte-db/java/interface-annotations/target/classes
[ERROR] COMPILATION ERROR :
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] 1 error

Also seeing the following error as in the previous run

[INFO] Reactor Summary:
[INFO] YugaByte 0.8.0-SNAPSHOT . SUCCESS [ 2.102 s]
[INFO] YB Annotations . FAILURE [ 8.214 s]
[INFO] YB Java Client . SKIPPED
[INFO] YB commandline interface . SKIPPED
[INFO] YB CQL Support . SKIPPED
[INFO] YB Load Tester . SKIPPED
[INFO] YB Jedis Tests 0.8.0-SNAPSHOT . SKIPPED
[INFO] BUILD FAILURE

Hi @ananyaks , could you, please, share the output of the following commands?

One of the reasons for error you’ve mentioned could be that «JAVA_HOME» env var is pointing to JRE. If it is the case, you can just unset the variable and build script will find JDK from linuxbrew.

Hi @ttyusupov , the file commands.txt has the output. Thanks!

Can you try to unset JAVA_HOME env variable before running yb_build and also install JDK with linuxbrew?

Hi @ananyaks, I think you have a JRE installed and not a JDK, so there is no java compiler available. Could you try downloading JDK 8, e.g. from http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html, extract it to some directory, and set JAVA_HOME to that directory? $JAVA_HOME/bin/java should be the location of the Java compiler. Also Oracle JDK would work best rather than OpenJDK.

Hi @ttyusupov, @mbautin, Thanks! Your suggestions helped in completing the build successfully. The copy and paste of the build output is in build_success.log, see if the output is what you expect?

Since the build was completed in pieces should I be concerned about the correctness of the build? Is it necessary to remove my local copy of yugabyte-db, do a fresh clone and build (this time skipping the prerequisite steps)?

Please take a look at output.txt, do they look ok? Do I need to set JDK_HOME , if yes, to what?

I want to run Java tests that use YCQL API against my build. Are the following steps correct from Quick Start to try this? If not, what are the steps?

  1. Skip the Install YugaByte DB step since I will be using the binaries from the build. Is this ok?
  2. Do Create Local Cluster step.
  3. Test YCQL API step.
  4. Run Sample Apps using YCQL API.
    • Key-Value Workload using YCQL API

[EDIT: Replacing my reply earlier because the notes I posted earlier on running Java tests were stale/incorrect]

Thanks to @ttyusupov for posting updated notes and also adding relevant sections to our README.md file.

Thanks @kmuthukk ! I will try it out.

Hi @kmuthukk, the mvn clean install package -DskipTests resulted in build failure captured in java_build_error.log. How can I fix this?

The one change I had done was to add $JAVA_HOME/bin at the beginning of PATH so that java is picked up from this location instead of /usr/bin/java .

export JAVA_HOME=/home/ananyaks/.linuxbrew-yb-build/Cellar/jdk@8/1.8.0-151 PATH=$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin:/usr/lib:/usr/lib64:/usr/include

Hi @ananyaks , we have a way to run tests from our build script.

Building Java code alone:
./yb_build.sh —scb

Running the Java tests

Viewing log outputs of Java tests

Note, that you have to pass release parameter to yb_build.sh if you want to run tests against a release YB build. By default it will try to run against a debug build and it should be already built (or you can skip —scb —sj and it will build it for you).

@ananyaks : Updated notes are also posted here in our README.md.

Hi @kmuthukk, @ttyusupov, I tried to run a single test with
./yb_build.sh —scb —sj —java-test org.yb.client.TestYBClient#testClientCreateDestroy but it resulted in error in single_test.log. The error is:

java.lang.RuntimeException: Directory that is supposed to contain YB C++ binaries not found in either of the following locations: /home/ananyaks/Documents/my-projects/yugabyte-db/build/debug-gcc-dynamic-community/bin, /home/ananyaks/Documents/my-projects/yugabyte-db__build/latest/bin

In my local repo there is no directory at:
/home/ananyaks/Documents/my-projects/yugabyte-db/build/debug-gcc-dynamic-community/bin
and no directory called:
/home/ananyaks/Documents/my-projects/yugabyte-db_build/

There is /home/ananyaks/Documents/my-projects/yugabyte-db/build/latest/bin and the files in it are listed in directory.log.

I tried passing release with ./yb_build.sh release —scb —sj —java-test org.yb.client.TestYBClient#testClientCreateDestroy and it worked and the output is in single_test_success.log

Based on the instruction
By default it will try to run against a debug build and it should be already built (or you can skip —scb —sj and it will build it for you).

I am now trying without specifying release —scb and —sj to see if the debug build will work. I see that the build has re-started.

Источник

Установка PostgreSQL из исходных кодов

Когда-то я рассказал про установку Ubuntu на VirtualBox. Настала пора рассказать про установку PostgreSQL из исходных кодов.

Сразу приступаем (считаю, что виртуальная или реальная машина с Ubuntu у вас уже имеется).

Уфф, сам удивился, что получилось очень много. Погнали!

1. ИНФОРМАЦИЯ О СТЕНДЕ

Для чистоты эксперимента еще покажу, какая у меня ВМка получилась по характеристикам: кратко — основной пользователь test, имя компьютера testPC , xUbuntu 20.04.01, 2 Гб ОЗУ, 1 ядро процессора, 20 ГБ жесткий диск SSD.

Хм, команды (почерпнутые из интернета) на моём стенде говорят, что мой диск — HDD. Странно, но разбираться сейчас не буду. Он точно SSD 🙂

2. НАСТРОЙКА ОПЕРАЦИОННОЙ СИСТЕМЫ

После установки ОС нужно выполнить еще несколько шагов.

Сейчас образы (как минимум Ubuntu, но, наверное, и других дистрибутивов) стараются сделать поменьше размером и не включают многие нужные пакеты, особенно для компиляции из исходных кодов (так, отсутствуют GCC и MAKE, которые нам нужны).

Чтобы не устанавливать все нужные пакеты по отдельности, поставим один пакет-справочник build-essential, все нужное для компиляции подтянется при его установке (G++, GCC, dpkg-dev, make ) и другие пакеты:

После завершения установки, снова проверим версии:

Теперь всё в порядке и можно продолжать.

3. ПОЛУЧЕНИЕ ИСХОДНОГО КОДА POSTGRESQL

Устанавливать будем из исходного кода, а его нужно где-то взять. Для этого воспользуемся официальным репозитарием на GitHub`e (сервисе онлайн-хранения кода с контролем версий): https://github.com/postgres/postgres/

Можно прямо с этой страницы код нужной ветки скачать, но мы поступим по другому:

Сначала установим специальную утилиту GIT, с помощью которой можно отслеживать изменения в онлайн-репозитарии на GitHub`e, скачивать-закачивать изменения. Проверим, может она уже есть (так и называется git):

Отсутствует. Поэтому установим, как и рекомендуют:

Теперь можно скачивать с помощью этой утилиты исходный код из официального репозитария следующей командой:

Клонируем (копируем себе) данный репозитарий. Клонирование занимает некоторое время (минут пять), поэтому, пока оно идет — можете быстро посмотреть полезный сайт с информацией о GIT`e: https://git-scm.com/book/ru/v2. Там много интересного материала по работе с GIT и GitHub.

Была создана директория postgres, перейдем туда:

В ней лежит много разных директорий (и файлов), о которых сейчас знать не обязательно:

Нужно проверить, в какой ветке мы находимся. Для этого используется команда:

Мы в ветке по умолчанию (master), но устанавливать будем последнюю на данный момент стабильную версию — 13-ю. Посмотреть все ветки в репозитарии можно либо командой:

большой список выводится. Либо можно и на веб-странице репозитария в GitHub`e посмотреть:

Теперь нужно переключиться на нужную ветку. Для этого существует команда git checkout, которой передается название ветки:

Теперь всё так, как нам нужно — активна тринадцатая ветка, именно эту версию и будем устанавливать.

4. ДО УСТАНОВКИ POSTGRESQL

Рекомендую почитать страницу документации с требованиями при установке из исходного кода.

На этой странице нужно обратить внимание на следующие несколько моментов:

По умолчанию при сборке используется библиотека GNU Readline. Она позволяет запоминать все вводимые команды в psql (SQL-интерпретатор командной строки для PostgreSQL) и затем, пользуясь клавишами-стрелками, возвращаться к ним и редактировать их.

Если вы не желаете использовать эту возможность, вы должны добавить указание —without-readline для configure.

Если не указать —wihout-readline, при выполнении команды ./configure появится следующая ошибка:

Если не устанавливать эту возможность, тогда в psql`е будет не очень удобно работать. Например, выполняем отображение версии сервера, затем хотим повторить эту команду — если нажать на стрелку вверх (как это обычно делаем в терминале) появляются вот такие цифробуквы, которые нам ничем не помогут (^[[A):

В интернете рекомендуют ставить libreadline-dev.

Еще момент со страницы документации:

По умолчанию для сжатия данных используется библиотека zlib.

Если вы не хотите её использовать, вы должны передать configure указание —without-zlib.

А если не указать —wihout-zlib, при выполнении команды ./configure появится вот такая ошибка:

Если не устанавливать эту возможность, тогда не получиться заархивировать дамп базы данных (при использовании pg_dump). При выполнении данной команды с параметром установки сжатия данных (-Z 0..9) появится следующее сообщение:

В интернете рекомендуют ставить zlib1g-dev.

И заключительный момент:

Если вы хотите скомпилировать код из дерева Git, а не из специального пакета исходного кода, либо вы хотите работать с этим кодом, вам также понадобятся следующие пакеты:

Flex и Bison потребуются для сборки из содержимого Git или если вы меняете собственно файлы определений анализа и разбора.

Flex — средством для генерации программ. которые распознают шаблоны в тексте.

Bison — является генератором парсеров, генерирует программу, которая анализирует структуру текстовых файлов.

Мы ставим именно из дерева Git, поэтому сначала нужно поставить еще и их.

Итого — нужно доставить следующие пакеты:

следующим стандартным образом:

После завершения установки этих пакетов проверьте, чтобы вы находились в директории postgres, так как далее команды будем выполнять именно оттуда.

5. УСТАНОВКА POSTGRESQL

Процесс установки из исходного кода состоит из трех этапов:

  1. Конфигурирование — запуск команды ./configure . Эта команда ищет необходимые библиотеки и заголовочные файлы, осуществляет настройку особых параметров и подключается дополнительные библиотеки (описанные выше —without-параметры из этой области). В результате работы создается файлы Makefiles, содержащий всю необходимую информацию для сборки, его можно просмотреть в текстовом редакторе.
  2. Сборка (компиляция) — запуск команды make . Запускается компиляция программы из исходного кода. При работе используется Makefiles, в которых описаны все параметры сборки приложения. Результат работы — собранная программа в текущей директории.
  3. Установка — команда make install . Запускается непосредственная установка собранного приложения. Результат — работоспособная программа (если не было ошибок).

Пройдем эти шаги (в документации они тоже описаны):

Запускаем конфигурирование. Так как я установил и readline и gzip, я просто запускаю команду:

Выполнение этой команды у меня занимается около пятнадцати секунд. Последние пять строк вывода:

Опять же, если вы поставили и bizon, и flex — тогда ошибок не будет. Но, если этих программ не хватает, ошибки будут выглядеть следующим образом:

Не установлен bison:

Не установлен flex:

Если произошли такие ошибки, можно откатиться к начальному состоянию и запустить конфигурирование и установку заново. Для этого используется команда:

После нее снова нужно запускать ./configure с указанием необходимых параметров (если они есть). И потом — опять make.

Кстати, если вы хотите сохранить всё, что выводит команда make, её вывод можно отправить в файл следующим образом:

А если вы хотите собрать всё, что может быть собрано, включая документацию (страницы HTML и man) и дополнительные модули (contrib), выполните команду:

Финальное сообщение будет следующим:

На моей виртуальной машине сборка шла около семи минут (плюс-минус минута). Если сборка завершилась успешно, вы увидите следующее сообщение:

Далее можно запустить команду make check. С помощью этой команды можно протестировать собранный сервер до его установки с помощью регрессионных тестов. Регрессионные тесты — это комплект тестов, проверяющих, что PostgreSQL работает на вашем компьютере так, как задумано разработчиками. Давайте проверим:

По видимому, всё хорошо (проверка длилась около минуты). Идем дальше.

Установка — запускаем команду:

И через пару секунд я получил сообщение:

Ура! Установка PotsgreSQL 13-й версии успешно завершена!

Но пользоваться данной СУБД еще не получиться… Нужно произвести настройки (и в документации об этом говориться: Подготовка к работе и сопровождение сервера, ссылку даю на оглавление раздела).

6. НАСТРОЙКИ ДЛЯ РАБОТЫ С POSTGRESQL

Если кратко — нужно создать отдельного пользователя для PostgreSQL, инициализировать кластер баз данных, проверить работоспособность сервера, создать и сохранить переменные окружения и установить дополнительные модули (contrib).

А теперь — подробнее.

Не рекомендуется запускать сервер PostgreSQL от имени суперпользователя ОС. Поэтому — создадим для этого отдельного пользователя с помощью следующей команды:

Нужно будет указать пароль и дополнительные параметры.

Далее нужно создать директорию, где PostgreSQL будет хранить файлы баз данных и дополнительную информацию. Выполним команду создания директории:

/usr/local/pgsql/data — каталог с данными, можно указать любой. Я использую именно эту директорию.

И теперь нужно поменять владельца этой директории, ведь PostgreSQL у нас работать будет под пользователем postgres:

После этого работаем от пользователя postgres. Переключиться на него можно с помощью следующей команды:

Перед началом использования сервера, необходимо инициализировать кластер БД (подсказать PostgreSQL, что созданная выше директория будет являеться каталогом с данными сервера). Для этого используется утилита initdb.

При моих настройках, нужно перейти в директорию, где находятся исполняемые файлы PostgreSQL (можно руками поменять этот путь, но мы ничего не меняли и оставили значение по умолчанию):

Все нужные нам команды — initdb, psql, pg_dump и другие.

Но запускать эти команды просто так нельзя (без доп.настроек). Нужно зайти в эту директорию и запускать через точку: ./initdb; ./psql

Чтобы было удобнее, необходимо настроить переменную окружения $PATH.

$PATH — это переменная окружения, используемая для указания оболочке, где искать исполняемые файлы.

Но — сначала убедимся, что (ну мало ли?) ничего не настроена. Попробуем выполнить команду инициализации кластера. В документации описаны ключи этой команды, самый главный здесь D — путь до директории с данными, которую создали на предыдущем шаге:

Не настроено ничего. Но настроить довольно просто:

Данной командой мы к переменной $PATH добавляем в начало путь до нашей директории с программами.

А теперь снова проверим команду инициализации кластера:

Всё отлично! Теперь можно запускать сервер (даже команду нам подсказали). Но я воспользуюсь самой минимальной записью этой команды:

Ой… Не заработало. Не сработала эта команда потому, что я важный ключ -D не указал (каталог с данными). Можно его руками прописать, в ключе. А можно настроить переменную окружения $PGDATA. Если она заполнена — то pg_ctl будет оттуда информацию забирать. Ну и наличие такой переменной — это удобно. Настроим следующим образом:

И снова попробуем запустить сервер:

Сервер запустился. Подключимся к серверу с помощью psql`a:

Всё работает! Установлена версия PostgreSQL 13.1. Если стрелку вверх нажать в psql — будут подставляться предыдущие команды, удобно.

7. УСТАНОВКА РАСШИРЕНИЙ

Давайте еще попробуем проверить, какие расширения сейчас доступны:

Всего одно расширение. Не густооооааа, так ведь расширения (лично я) и не ставил никакие!

Давайте вы уже сами всё поставите. Команды такие:

  • Возвращаемся в суперпользователя ОС
  • cd

/postgres/contrib

  • make
  • sudo make install
  • А теперь вернемся в пользователя postgres:

    8. СОХРАНЕНИЕ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ

    И проверим доступные расширения. Запускаем psql:

    Ну что ж такое! Только что всё работало! Проверим ка мы переменную $PATH:

    Нет нашего адреса! Как так?

    А вот так — когда мы же создавали переменную окружения, мы создали её для текущего сеанса пользователя. Закрыли терминал — переменная исчезла. Нужно её создать и сохранить. Я использую следующий способ — сохранение переменных в файле .bashrc (это файл с командами, которые выполняются при запуске оболочки bash).

    Перейдите в домашнюю директорию пользователя postgres (для других пользователей можно сделать то же самое, так как .bashrc — это файл для конкретного пользователя) и проверьте, какие скрытые файлы там есть, точка в начале означает, что это скрытый файл:

    У меня вывод получился такой:

    Не помню уже, кто и когда создал этот файл. Ну и ничего страшного. Если у вас такого файл нет — создайте его:

    Открываем его любым удобным редактором на изменение (я использую nano):

    И добавляем туда (в самый конец, если в файле уже что-то есть) объявление двух наших переменных окружения:

    Нажимаем Ctrl + x для выхода с сохранением, подтверждаем сохранения.

    Чтобы переменные применились — нужно повторно запустить bash — я вернулся в моего пользователя test, а потом снова зашел в postgres и запустил команду psql:

    И проверим доступные расширения (ранее у нас было только одно, но вы же установили всё из папки /contrib?):

    Сорок одно доступное расширение! Вот теперь всё работает так, как я и хотел.

    Мы поставили необходимые библиотеки для корректной установки PostgreSQL, установили сервер, осуществили необходимые настройки (стрелка вверх в psql работает), убедились в работоспособности PostgreSQL, установили все доступные расширения.

    Источник

    Comments

    @ananyaks

    yugabyte-ci

    pushed a commit
    that referenced
    this issue

    Jul 4, 2018

    @ttyusupov

    Summary:
    Added missed dependencies into instructions for building community edition. Also updated
    Linuxbrew repository URL to HTTPS, so it can be cloned without setting up public key.
    
    Test Plan:
    - Start fresh CentOS 7 server on GCP
    - Follow instructions for building community edition
    
    Reviewers: mikhail, kannan
    
    Reviewed By: kannan
    
    Subscribers: kannan, ybase
    
    Differential Revision: https://phabricator.dev.yugabyte.com/D5103

    yugabyte-ci

    pushed a commit
    that referenced
    this issue

    Jul 5, 2018

    @mbautin

    Summary:
    We should not depend on tools.jar anymore. The tools.jar file has different locations depending
    on the JDK version.
    
    Test Plan: Jenkins: java tests only
    
    Reviewers: timur, kannan
    
    Subscribers: ybase
    
    Differential Revision: https://phabricator.dev.yugabyte.com/D5106

    yugabyte-ci

    pushed a commit
    that referenced
    this issue

    Jul 9, 2018

    @ttyusupov

    Summary:
    Added `release` argument for `yb_build.sh` when running Java tests, since in all other
    cases we are working with release build. Also added how to produce a debug build.
    
    Test Plan:
    Follow instruction and make sure it works
    Jenkins: skip
    
    Reviewers: mikhail, kannan
    
    Reviewed By: kannan
    
    Subscribers: eng
    
    Differential Revision: https://phabricator.dev.yugabyte.com/D5126

    2017-11-20 13:21:49 13935 2

    Установка и первоначальная настройка Postgresql из исходников на Ubuntu 16.04

    Произведем установку и первоначальную настройку СУБД Postgresql из исходных кодов на ОС Ubuntu 16.04. Для сборки возьмем версию Postgresql-9.6.5

    Скачаем исходные коды Postgresql с официального сайта в директорию /usr/src:

    cd /usr/src

    wget https://ftp.postgresql.org/pub/source/v9.6.5/postgresql-9.6.5.tar.gz

    Разархивируем архим с файлами:

    tar xzf postgresql-9.6.5.tar.gz

    Заходим в распакованную директорию:

    cd postgresql-9.6.5

    Выведем все возможные опции для сборки пакета:

    sudo ./configure —help

    `configure" configures PostgreSQL 9.6.5 to adapt to many kinds of systems.
    
    Usage: ./configure [OPTION]... [VAR=VALUE]...
    
    To assign environment variables (e.g., CC, CFLAGS...), specify them as
    VAR=VALUE.  See below for descriptions of some of the useful variables.
    
    Defaults for the options are specified in brackets.
    
    Configuration:
      -h, --help              display this help and exit
          --help=short        display options specific to this package
          --help=recursive    display the short help of all the included packages
      -V, --version           display version information and exit
      -q, --quiet, --silent   do not print `checking ..." messages
          --cache-file=FILE   cache test results in FILE [disabled]
      -C, --config-cache      alias for `--cache-file=config.cache"
      -n, --no-create         do not create output files
          --srcdir=DIR        find the sources in DIR [configure dir or `.."]
    
    Installation directories:
      --prefix=PREFIX         install architecture-independent files in PREFIX
                              [/usr/local/pgsql]
      --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                              [PREFIX]
    
    By default, `make install" will install all the files in
    `/usr/local/pgsql/bin", `/usr/local/pgsql/lib" etc.  You can specify
    an installation prefix other than `/usr/local/pgsql" using `--prefix",
    for instance `--prefix=$HOME".
    
    For better control, use the options below.
    
    Fine tuning of the installation directories:
      --bindir=DIR            user executables [EPREFIX/bin]
      --sbindir=DIR           system admin executables [EPREFIX/sbin]
      --libexecdir=DIR        program executables [EPREFIX/libexec]
      --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
      --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
      --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
      --libdir=DIR            object code libraries [EPREFIX/lib]
      --includedir=DIR        C header files [PREFIX/include]
      --oldincludedir=DIR     C header files for non-gcc [/usr/include]
      --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
      --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
      --infodir=DIR           info documentation [DATAROOTDIR/info]
      --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
      --mandir=DIR            man documentation [DATAROOTDIR/man]
      --docdir=DIR            documentation root [DATAROOTDIR/doc/postgresql]
      --htmldir=DIR           html documentation [DOCDIR]
      --dvidir=DIR            dvi documentation [DOCDIR]
      --pdfdir=DIR            pdf documentation [DOCDIR]
      --psdir=DIR             ps documentation [DOCDIR]
    
    System types:
      --build=BUILD     configure for building on BUILD [guessed]
      --host=HOST       cross-compile to build programs to run on HOST [BUILD]
    
    Optional Features:
      --disable-option-checking  ignore unrecognized --enable/--with options
      --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
      --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
      --disable-integer-datetimes
                              disable 64-bit integer date/time support
      --enable-nls[=LANGUAGES]
                              enable Native Language Support
      --disable-rpath         do not embed shared library search path in
                              executables
      --disable-spinlocks     do not use spinlocks
      --disable-atomics       do not use atomic operations
      --enable-debug          build with debugging symbols (-g)
      --enable-profiling      build with profiling enabled
      --enable-coverage       build with coverage testing instrumentation
      --enable-dtrace         build with DTrace support
      --enable-tap-tests      enable TAP tests (requires Perl and IPC::Run)
      --enable-depend         turn on automatic dependency tracking
      --enable-cassert        enable assertion checks (for debugging)
      --disable-thread-safety disable thread-safety in client libraries
      --disable-largefile     omit support for large files
      --disable-float4-byval  disable float4 passed by value
      --disable-float8-byval  disable float8 passed by value
    
    Optional Packages:
      --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
      --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
      --with-extra-version=STRING
                              append STRING to version
      --with-template=NAME    override operating system template
      --with-includes=DIRS    look for additional header files in DIRS
      --with-libraries=DIRS   look for additional libraries in DIRS
      --with-libs=DIRS        alternative spelling of --with-libraries
      --with-pgport=PORTNUM   set default port number [5432]
      --with-blocksize=BLOCKSIZE
                              set table block size in kB [8]
      --with-segsize=SEGSIZE  set table segment size in GB [1]
      --with-wal-blocksize=BLOCKSIZE
                              set WAL block size in kB [8]
      --with-wal-segsize=SEGSIZE
                              set WAL segment size in MB [16]
      --with-CC=CMD           set compiler (deprecated)
      --with-tcl              build Tcl modules (PL/Tcl)
      --with-tclconfig=DIR    tclConfig.sh is in DIR
      --with-perl             build Perl modules (PL/Perl)
      --with-python           build Python modules (PL/Python)
      --with-gssapi           build with GSSAPI support
      --with-krb-srvnam=NAME  default service principal name in Kerberos (GSSAPI)
                              [postgres]
      --with-pam              build with PAM support
      --with-bsd-auth         build with BSD Authentication support
      --with-ldap             build with LDAP support
      --with-bonjour          build with Bonjour support
      --with-openssl          build with OpenSSL support
      --with-selinux          build with SELinux support
      --with-systemd          build with systemd support
      --without-readline      do not use GNU Readline nor BSD Libedit for editing
      --with-libedit-preferred
                              prefer BSD Libedit over GNU Readline
      --with-uuid=LIB         build contrib/uuid-ossp using LIB (bsd,e2fs,ossp)
      --with-ossp-uuid        obsolete spelling of --with-uuid=ossp
      --with-libxml           build with XML support
      --with-libxslt          use XSLT support when building contrib/xml2
      --with-system-tzdata=DIR
                              use system time zone data in DIR
      --without-zlib          do not use Zlib
      --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
    
    Some influential environment variables:
      CC          C compiler command
      CFLAGS      C compiler flags
      LDFLAGS     linker flags, e.g. -L if you have libraries in a
                  nonstandard directory 
      LIBS        libraries to pass to the linker, e.g. -l
      CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I if
                  you have headers in a nonstandard directory 
      CPP         C preprocessor
      LDFLAGS_EX  extra linker flags for linking executables only
      LDFLAGS_SL  extra linker flags for linking shared libraries only
      DOCBOOKSTYLE
                  location of DocBook stylesheets
    
    Use these variables to override the choices made by `configure" or to help
    it to find libraries and programs with nonstandard names/locations.
    

    Выбираем необходимые и добавляем их как опции при сборке.

    Запускаем скрипт для конфигурирования сборки (собирать будем с поддержкой systemd):

    sudo ./configure —with-systemd

    Выпадает ошибка:

    checking for gcc... no
    checking for cc... no
    configure: error: in `/usr/src/postgresql-9.6.5":
    configure: error: no acceptable C compiler found in $PATH
    See `config.log" for more details
    
    

    Не найден gcc, установим его:

    sudo apt-get install gcc

    Следующая ошибка при повторной конфигурации:

    checking for library containing readline... no
    configure: error: readline library not found
    If you have readline already installed, see config.log for details on the
    failure.  It is possible the compiler isn"t looking in the proper directory.
    Use --without-readline to disable readline support.
    

    Ставим недостающую библиотеку:

    sudo apt-get install libreadline-dev

    Для redhat подобных систем:

    sudo yum install readline-devel

    Следующая ошибка библиотека zlib

    checking for inflate in -lz... no
    configure: error: zlib library not found
    If you have zlib already installed, see config.log for details on the
    failure.  It is possible the compiler isn"t looking in the proper directory.
    Use --without-zlib to disable zlib support.
    

    Ставим и ее:

    sudo apt-get install zlibc zlib1g-dev

    Для redhat подобных систем:

    sudo yum install zlib-devel

    Далее ошибка библиотеки libsystemd, ставим ее

    sudo apt-get install libsystemd-dev

    Для redhat подобных систем:

    sudo yum install systemd-devel

    Запускаем скрипт configure еще раз и получаем успешный результат.

    Устанавливаем пакет make:

    sudo apt-get install make

    Теперь выполним сборку postgresql:

    sudo make

    После успешной сборки установим собранный пакет:

    sudo make install

    Проверякм структуры директорий Postgresql:

    ls -l /usr/local/pgsql

    total 16
    drwxr-xr-x 2 root root 4096 Nov  9 07:33 bin
    drwxr-xr-x 6 root root 4096 Nov  9 07:33 include
    drwxr-xr-x 4 root root 4096 Nov  9 07:33 lib
    drwxr-xr-x 6 root root 4096 Nov  9 07:33 share
    

    Создаем пользователя postgres

    sudo useradd -M postgres

    Создаем директори для хранения данных:

    mkdir -p /var/lib/pgsql/data

    Зададим права на эту директорию:

    sudo chown -R postgres:postgres /var/lib/pgsql

    Инициализация postgresql

    Получаем права пользователя postgres:

    su postgres

    Запускаем инициализацию:

    /usr/local/pgsql/bin/initdb -D /var/lib/pgsql/data/

    The files belonging to this database system will be owned by user "postgres".
    This user must also own the server process.
    
    The database cluster will be initialized with locale "en_US.UTF-8".
    The default database encoding has accordingly been set to "UTF8".
    The default text search configuration will be set to "english".
    
    Data page checksums are disabled.
    
    fixing permissions on existing directory /var/lib/pgsql/data ... ok
    creating subdirectories ... ok
    selecting default max_connections ... 100
    selecting default shared_buffers ... 128MB
    selecting dynamic shared memory implementation ... posix
    creating configuration files ... ok
    running bootstrap script ... ok
    performing post-bootstrap initialization ... ok
    syncing data to disk ... ok
    
    WARNING: enabling "trust" authentication for local connections
    You can change this by editing pg_hba.conf or using the option -A, or
    --auth-local and --auth-host, the next time you run initdb.
    
    Success. You can now start the database server using:
    
        /usr/local/pgsql/bin/pg_ctl -D /var/lib/pgsql/data/ -l logfile start
    
    

    Запускаем демона psotgresql:

    /usr/local/pgsql/bin/pg_ctl -D /var/lib/pgsql/data/ -l logfile start

    Проверяем подключение к СУБД:

    /usr/local/pgsql/bin/psql

    psql (9.6.5)
    Type "help" for help.
    
    postgres=# 
    

    Для удобства запуска сервиса создадим systemd скрипт для демона Postgresql

    sudo touch /etc/systemd/system/postgresql.service

    И наполним его следующим содержанием:

    cat /etc/systemd/system/postgresql.service

    [Unit]
    Description=PostgreSQL database server
    After=network.target
    
    [Service]
    Type=forking
    
    User=postgres
    Group=postgres
    
    # Maximum number of seconds pg_ctl will wait for postgres to start.  Note that
    # PGSTARTTIMEOUT should be less than TimeoutSec value.
    Environment=PGSTARTTIMEOUT=270
    
    Environment=PGDATA=/var/lib/pgsql/data
    
    
    ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA} -s -w -t ${PGSTARTTIMEOUT}
    ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -s -m fast
    ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D ${PGDATA} -s
    
    # Give a reasonable amount of time for the server to start up/shut down.
    # Ideally, the timeout for starting PostgreSQL server should be handled more
    # nicely by pg_ctl in ExecStart, so keep its timeout smaller than this value.
    TimeoutSec=300
    
    [Install]
    WantedBy=multi-user.target
    

    Останавливаем ранее запущенного демона postgresql:

    su postgres -c «/usr/local/pgsql/bin/pg_ctl -D /var/lib/pgsql/data/ stop»

    Перезапустим конфигурацию демона systemd:

    systemctl daemon-reload

    Запустим и добавим в загрузку демона Postgresql:

    systemctl start postgresql

    systemctl enable postgresql

    Основной файл настроек Postgresql это postgresql.conf, который хранится в директории с данными в нашем случае это /var/lib/pgsql/data, там очень много настроек, которые можно посмотреть на официальном сайте в документации, поэтому не будем их рассматривать.

    Рассмотрим некоторые варианты настройки доступа к базам данных. Настройки доступа хранятся в файле pg_hba.conf. Они представляют собой строки с указанием типа подключения, база данных к которой разрешено подключение, пользователь который подключается, адрес откуда происходит подключение и метод аутентификации пользователя.

    cat /var/lib/pgsql/data/pg_hba.conf

    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # "local" is for Unix domain socket connections only
    local   all             all                                     trust
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            trust
    # IPv6 local connections:
    host    all             all             ::1/128                 trust
    # Allow replication connections from localhost, by a user with the
    
    

    Рассмотрим возможные значения столбцов:

      Тип подключения:

    • local — подключение через доменные сокеты Unix;
    • host — подключение по TCP/IP;
    • hostssl — подключение по TCP/IP с применением шифрования SSL;
    • hostnossl — противоположен hostssl, подключение по TCP/IP без шифрования SSL.
      Базза данных — определяет к какой базе осуществляется подключение:

    • Имя конкретной баззы данных;
    • all — все баззы данных;
    • sameuser — определяет, что данная запись соответствует только, если имя запрашиваемой базы данных совпадает с именем запрашиваемого пользователя.
    • samerole — определяет, что запрашиваемый пользователь должен быть членом роли с таким же именем, как и у запрашиваемой базы данных.
      Пользователь — учетная запись под которой происходит подключение к базе:

    • Конкретное имя пользователя (несколько пользователей через запятую);
    • all — любой пользователь;
    • знак + перед именем пользователя — подключаемый пользователь имеет отношение к указанной роли;
    • знак @ далее идет имя файла содержащего список пользователей.
      Адрес — адрес клиента, с которого происходит подключение:

    • ip-адрес/маска (172.20.1.0/24, 172.20.1.1/32);
    • all — любой хост;
    • samehost — любой адрес данного сервера;
    • samenet — любой адрес любой сети, к которой сервер подключен напрямую.
      Метод аутентификации:

    • trust — разрешает безусловное подключение;
    • reject — отклоняет подключение;
    • md5 — требует от клиента предоставить пароль;
    • password — требуется для аутентификации клиентом с вводом незашифрованного пароля;
    • ident — получает имя пользователя операционной системы клиента, связываясь с сервером Ident, и проверяет, соответствует ли оно имени пользователя базы данных. Аутентификация ident может использоваться только для подключений по TCP/IP;
    • peer — получает имя пользователя операционной системы клиента из операционной системы и проверяет, соответствует ли оно имени пользователя запрашиваемой базы данных. Доступно только для локальных подключений;
    • ldap — аутентификация с помощью сервера LDAP;
    • radius — аутентификация с помощью сервера Radius;
    • cert — аутентификация с помощью сертификата;
    • pam — аутентификация с помощью службы подключаемых модулей аутентификации (PAM).

    PostgreSQLКогда-то я рассказал про установку Ubuntu на VirtualBox. Настала пора рассказать про установку PostgreSQL из исходных кодов.

    Сразу приступаем (считаю, что виртуальная или реальная машина с Ubuntu у вас уже имеется).

    Что нас ждет:

    1. Информация о стенде
    2. Настройка операционной системы
    3. Получение исходного кода PostgreSQL
    4. До установки PostgreSQL
    5. Установка PostgreSQL
    6. Настройки для работы с PostgreSQL
    7. Установка расширений
    8. Сохранение переменных окружения
    9. Итоги

    Уфф, сам удивился, что получилось очень много. Погнали!

    1. ИНФОРМАЦИЯ О СТЕНДЕ

    Для чистоты эксперимента еще покажу, какая у меня ВМка получилась по характеристикам: кратко — основной пользователь test, имя компьютера testPC, xUbuntu 20.04.01, 2 Гб ОЗУ, 1 ядро процессора, 20 ГБ жесткий диск SSD.

    Больше информации о стенде:

    test@testPC:~$ lscpu | head -n 17
    Architecture:                	x86_64
    CPU op-mode(s):              	32-bit, 64-bit
    Byte Order:                  	Little Endian
    Address sizes:               	39 bits physical, 48 bits virtual
    CPU(s):                      	1
    On-line CPU(s) list:         	0
    Thread(s) per core:          	1
    Core(s) per socket:          	1
    Socket(s):                   	1
    NUMA node(s):                	1
    Vendor ID:                   	GenuineIntel
    CPU family:                  	6
    Model:                       	142
    Model name:                  	Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz
    Stepping:                    	12
    CPU MHz:                     	1799.959
    BogoMIPS:                    	3599.91
    
    test@testPC:~$ free -h
    total    		used    free  		shared  	buff/cache   available
    Mem:      	1,9Gi   		1,1Gi   	188Mi    	32Mi   		674Mi   	683Mi
    Swap:     	923Mi      	0B   	923Mi
    
    
    test@testPC:~$ sudo fdisk -l | grep '^/dev'
    [sudo] password for test:
    /dev/sda1  *   	2048  1050623  1048576  512M  b W95 FAT32
    /dev/sda2   	1052670 41940991 40888322 19,5G  5 Extended
    /dev/sda5   	1052672 41940991 40888320 19,5G 83 Linux
    
    test@testPC:~$ sudo lshw -class display
      *-display            	 
       	description: VGA compatible controller
       	product: VirtualBox Graphics Adapter
       	vendor: InnoTek Systemberatung GmbH
       	physical id: 2
       	bus info: pci@0000:00:02.0
       	version: 00
       	width: 32 bits
       	clock: 33MHz
       	capabilities: vga_controller rom
       	configuration: driver=vboxvideo latency=0
       	resources: irq:18 memory:e0000000-e0ffffff memory:c0000-dffff
    
    test@testPC:~$ lsb_release -a
    No LSB modules are available.
    Distributor ID:    Ubuntu
    Description:    Ubuntu 20.04.1 LTS
    Release:    20.04
    Codename:    focal
    
    

    Хм, команды (почерпнутые из интернета) на моём стенде говорят, что мой диск — HDD. Странно, но разбираться сейчас не буду. Он точно SSD 🙂

    [свернуть]

    2. НАСТРОЙКА ОПЕРАЦИОННОЙ СИСТЕМЫ

    После установки ОС нужно выполнить еще несколько шагов.

    Сейчас образы (как минимум Ubuntu, но, наверное, и других дистрибутивов) стараются сделать поменьше размером и не включают многие нужные пакеты, особенно для компиляции из исходных кодов (так, отсутствуют GCC и MAKE, которые нам нужны).

    Давайте проверим:

    test@testPC:~$ gcc --version
    Command 'gcc' not found, but can be installed with:
    sudo apt install gcc
    
    test@testPC:~$ make --version
    Command 'make' not found, but can be installed with:
    sudo apt install make    # version 4.2.1-1.2, or
    sudo apt install make-guile  # version 4.2.1-1.2
    

    Чтобы не устанавливать все нужные пакеты по отдельности, поставим один пакет-справочник build-essential, все нужное для компиляции подтянется при его установке (G++, GCC, dpkg-dev, make) и другие пакеты:

    sudo apt update
    sudo apt install build-essential
    

    После завершения установки, снова проверим версии:

    test@testPC:~$ gcc --version
    gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
    Copyright (C) 2019 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    test@testPC:~$ make --version
    GNU Make 4.2.1
    Built for x86_64-pc-linux-gnu
    Copyright (C) 1988-2016 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    


    Теперь всё в порядке и можно продолжать.

    3. ПОЛУЧЕНИЕ ИСХОДНОГО КОДА POSTGRESQL

    Устанавливать будем из исходного кода, а его нужно где-то взять. Для этого воспользуемся официальным репозитарием на GitHub`e (сервисе онлайн-хранения кода с контролем версий): https://github.com/postgres/postgres/

    Можно прямо с этой страницы код нужной ветки скачать, но мы поступим по другому:

    PG-DownloadZip

    Сначала установим специальную утилиту GIT, с помощью которой можно отслеживать изменения в онлайн-репозитарии на GitHub`e, скачивать-закачивать изменения. Проверим, может она уже есть (так и называется git):

    test@testPC:~$ git --version
    Command 'git' not found, but can be installed with:
    sudo apt install git
    


    Отсутствует. Поэтому установим, как и рекомендуют:

    sudo apt install git
    

    Теперь можно скачивать с помощью этой утилиты исходный код из официального репозитария следующей командой:

    git clone https://github.com/postgres/postgres
    

    Клонируем (копируем себе) данный репозитарий. Клонирование занимает некоторое время (минут пять), поэтому, пока оно идет — можете быстро посмотреть полезный сайт с информацией о GIT`e: https://git-scm.com/book/ru/v2. Там много интересного материала по работе с GIT и GitHub.

    test@testPC:~$ git clone https://github.com/postgres/postgres
    Cloning into 'postgres'...
    remote: Enumerating objects: 25, done.
    remote: Counting objects: 100% (25/25), done.
    remote: Compressing objects: 100% (25/25), done.
    remote: Total 811101 (delta 0), reused 1 (delta 0), pack-reused 811076
    Receiving objects: 100% (811101/811101), 504.15 MiB | 2.96 MiB/s, done.
    Resolving deltas: 100% (665498/665498), done.
    Updating files: 100% (5794/5794), done.
    


    Была создана директория postgres, перейдем туда:

    cd postgres

    В ней лежит много разных директорий (и файлов), о которых сейчас знать не обязательно:

    test@testPC:~/postgres$ ls
    aclocal.m4  configure contrib doc         HISTORY   README  src
    config  configure.ac  COPYRIGHT  GNUmakefile.in  Makefile  README.git
    

    Нужно проверить, в какой ветке мы находимся. Для этого используется команда:

    test@testPC:~/postgres$ git status
    On branch master
    Your branch is up to date with 'origin/master'.
    nothing to commit, working tree clean
    

    Мы в ветке по умолчанию (master), но устанавливать будем последнюю на данный момент стабильную версию — 13-ю. Посмотреть все ветки в репозитарии можно либо командой:

    git branch -a

    Вывод git branch -a:

    test@testPC:~/postgres$ git branch -a
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/REL2_0B
      remotes/origin/REL6_4
      remotes/origin/REL6_5_PATCHES
      remotes/origin/REL7_0_PATCHES
      remotes/origin/REL7_1_STABLE
      remotes/origin/REL7_2_STABLE
      remotes/origin/REL7_3_STABLE
      remotes/origin/REL7_4_STABLE
      remotes/origin/REL8_0_STABLE
      remotes/origin/REL8_1_STABLE
      remotes/origin/REL8_2_STABLE
      remotes/origin/REL8_3_STABLE
      remotes/origin/REL8_4_STABLE
      remotes/origin/REL8_5_ALPHA1_BRANCH
      remotes/origin/REL8_5_ALPHA2_BRANCH
      remotes/origin/REL8_5_ALPHA3_BRANCH
      remotes/origin/REL9_0_ALPHA4_BRANCH
      remotes/origin/REL9_0_ALPHA5_BRANCH
      remotes/origin/REL9_0_STABLE
      remotes/origin/REL9_1_STABLE
      remotes/origin/REL9_2_STABLE
      remotes/origin/REL9_3_STABLE
      remotes/origin/REL9_4_STABLE
      remotes/origin/REL9_5_STABLE
      remotes/origin/REL9_6_STABLE
      remotes/origin/REL_10_STABLE
      remotes/origin/REL_11_STABLE
      remotes/origin/REL_12_STABLE
      remotes/origin/REL_13_STABLE
      remotes/origin/Release_1_0_3
      remotes/origin/WIN32_DEV
      remotes/origin/ecpg_big_bison
      remotes/origin/master
    

    [свернуть]

    большой список выводится. Либо можно и на веб-странице репозитария в GitHub`e посмотреть:

    PG_Branches

    Теперь нужно переключиться на нужную ветку. Для этого существует команда git checkout, которой передается название ветки:

    test@testPC:~/postgres$ git checkout REL_13_STABLE
    Branch 'REL_13_STABLE' set up to track remote branch 'REL_13_STABLE' from 'origin'.
    Switched to a new branch 'REL_13_STABLE'
    test@testPC:~/postgres$ git status
    On branch REL_13_STABLE
    Your branch is up to date with 'origin/REL_13_STABLE'.
    
    nothing to commit, working tree clean
    

    Теперь всё так, как нам нужно — активна тринадцатая ветка, именно эту версию и будем устанавливать.

    4. ДО УСТАНОВКИ POSTGRESQL

    Рекомендую почитать страницу документации с требованиями при установке из исходного кода.

    На этой странице нужно обратить внимание на следующие несколько моментов:

    По умолчанию при сборке используется библиотека GNU Readline. Она позволяет запоминать все вводимые команды в psql (SQL-интерпретатор командной строки для PostgreSQL) и затем, пользуясь клавишами-стрелками, возвращаться к ним и редактировать их.

    Если вы не желаете использовать эту возможность, вы должны добавить указание —without-readline для configure.

    Если не указать —wihout-readline, при выполнении команды ./configure появится следующая ошибка:

    ...
    configure: error: readline library not found
    If you have readline already installed, see config.log for details on the 
    failure.  It is possible the compiler isn't looking in the proper directory.
    Use --without-readline to disable readline support.
    

    Если не устанавливать эту возможность, тогда в psql`е будет не очень удобно работать. Например, выполняем отображение версии сервера, затем хотим повторить эту команду — если нажать на стрелку вверх (как это обычно делаем в терминале) появляются вот такие цифробуквы, которые нам ничем не помогут (^[[A):

    postgres@testPC:~$ psql
    psql (12.5)
    Type "help" for help.
    
    postgres=# select version();
                                               	version                     	 
                     	 
    ----------------------------------------------------------------------------------------------------
     PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1
    ~20.04) 9.3.0, 64-bit
    (1 row)
    
    postgres=# ^[[A
    

    В интернете рекомендуют ставить libreadline-dev.

    Еще момент со страницы документации:

    По умолчанию для сжатия данных используется библиотека zlib.

    Если вы не хотите её использовать, вы должны передать configure указание —without-zlib.

    А если не указать —wihout-zlib, при выполнении команды ./configure появится вот такая ошибка:

    ...
    configure: error: zlib library not found
    If you have zlib already installed, see config.log for details on the
    failure.  It is possible the compiler isn't looking in the proper directory.
    Use --without-zlib to disable zlib support.
    

    Если не устанавливать эту возможность, тогда не получиться заархивировать дамп базы данных (при использовании pg_dump). При выполнении данной команды с параметром установки сжатия данных (-Z 0..9) появится следующее сообщение:

    postgres@testPC:/usr/local/pgsql/data$ pg_dump -d postgres -F c -Z 2 -f mydump
    pg_dump: warning: requested compression not available in this installation -- archive will be uncompressed
    

    В интернете рекомендуют ставить zlib1g-dev.

    И заключительный момент:

    Если вы хотите скомпилировать код из дерева Git, а не из специального пакета исходного кода, либо вы хотите работать с этим кодом, вам также понадобятся следующие пакеты:

    Flex и Bison потребуются для сборки из содержимого Git или если вы меняете собственно файлы определений анализа и разбора.

    Flex — средством для генерации программ. которые распознают шаблоны в тексте.

    Bison — является генератором парсеров, генерирует программу, которая анализирует структуру текстовых файлов.

    Мы ставим именно из дерева Git, поэтому сначала нужно поставить еще и их.

    Итого — нужно доставить следующие пакеты:

    • libreadline-dev
    • zlib1g-dev
    • flex
    • bison

    следующим стандартным образом:

    sudo apt install libreadline-dev
    sudo apt install zlib1g-dev
    sudo apt install flex
    sudo apt install bison
    

    После завершения установки этих пакетов проверьте, чтобы вы находились в директории postgres, так как далее команды будем выполнять именно оттуда.

    5. УСТАНОВКА POSTGRESQL

    Процесс установки из исходного кода состоит из трех этапов:

    1. Конфигурирование — запуск команды ./configure. Эта команда ищет необходимые библиотеки и заголовочные файлы, осуществляет настройку особых параметров и подключается дополнительные библиотеки (описанные выше —without-параметры из этой области). В результате работы создается файлы Makefiles, содержащий всю необходимую информацию для сборки, его можно просмотреть в текстовом редакторе.
    2. Сборка (компиляция) — запуск команды make. Запускается компиляция программы из исходного кода. При работе используется Makefiles, в которых описаны все параметры сборки приложения. Результат работы — собранная программа в текущей директории.
    3. Установка — команда make install. Запускается непосредственная установка собранного приложения. Результат — работоспособная программа (если не было ошибок).

    Пройдем эти шаги (в документации они тоже описаны):

    Запускаем конфигурирование. Так как я установил и readline и gzip, я просто запускаю команду:

    ./configure

    Выполнение этой команды у меня занимается около пятнадцати секунд. Последние пять строк вывода:

    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
    

    Далее — сборка:

    make

    Опять же, если вы поставили и bizon, и flex — тогда ошибок не будет. Но, если этих программ не хватает, ошибки будут выглядеть следующим образом:

    Не установлен bison:

    ERROR: `bison' is missing on your system. It is needed to create the
    file `gram.c'. You can either get bison from a GNU mirror site
    or download an official distribution of PostgreSQL, which contains
    pre-packaged bison output.
    ***
    make[2]: *** [../../../src/Makefile.global:750: gram.c] Error 1
    make[2]: Leaving directory '/home/test/postgres/src/backend/parser'
    make[1]: *** [Makefile:137: parser/gram.h] Error 2
    make[1]: Leaving directory '/home/test/postgres/src/backend'
    make: *** [src/Makefile.global:388: submake-generated-headers] Error 2
    

    Не установлен flex:

    ERROR: `flex' is missing on your system. It is needed to create the
    file `bootscanner.c'. You can either get flex from a GNU mirror site
    or download an official distribution of PostgreSQL, which contains
    pre-packaged flex output.
    ***
    make[3]: *** [../../../src/Makefile.global:745: bootscanner.c] Error 1
    make[3]: Leaving directory '/home/test/postgres/src/backend/bootstrap'
    make[2]: *** [common.mk:39: bootstrap-recursive] Error 2
    make[2]: Leaving directory '/home/test/postgres/src/backend'
    make[1]: *** [Makefile:42: all-backend-recurse] Error 2
    make[1]: Leaving directory '/home/test/postgres/src'
    make: *** [GNUmakefile:11: all-src-recurse] Error 2
    

    Если произошли такие ошибки, можно откатиться к начальному состоянию и запустить конфигурирование и установку заново. Для этого используется команда:

    make distclean

    После нее снова нужно запускать ./configure с указанием необходимых параметров (если они есть). И потом — опять make.

    Кстати!

    Кстати, если вы хотите сохранить всё, что выводит команда make, её вывод можно отправить в файл следующим образом:

    make > make.txt

    [свернуть]

    И на счет дополнительных режимов установки

    А если вы хотите собрать всё, что может быть собрано, включая документацию (страницы HTML и man) и дополнительные модули (contrib), выполните команду:

    make world

    Финальное сообщение будет следующим:

    PostgreSQL, contrib and documentation successfully made. Ready to install.
    

    [свернуть]

    На моей виртуальной машине сборка шла около семи минут (плюс-минус минута). Если сборка завершилась успешно, вы увидите следующее сообщение:

    All of PostgreSQL successfully made. Ready to install.
    

    Далее можно запустить команду make check. С помощью этой команды можно протестировать собранный сервер до его установки с помощью регрессионных тестов. Регрессионные тесты — это комплект тестов, проверяющих, что PostgreSQL работает на вашем компьютере так, как задумано разработчиками. Давайте проверим:

    make check
    
    =======================
     All 201 tests passed.
    =======================
    

    По видимому, всё хорошо (проверка длилась около минуты). Идем дальше.

    Установка — запускаем команду:

    sudo make install

    И через пару секунд я получил сообщение:

    PostgreSQL installation complete.

    Ура! Установка PotsgreSQL 13-й версии успешно завершена!

    Но пользоваться данной СУБД еще не получиться… Нужно произвести настройки (и в документации об этом говориться: Подготовка к работе и сопровождение сервера, ссылку даю на оглавление раздела).

    6. НАСТРОЙКИ ДЛЯ РАБОТЫ С POSTGRESQL

    Если кратко — нужно создать отдельного пользователя для PostgreSQL, инициализировать кластер баз данных, проверить работоспособность сервера, создать и сохранить переменные окружения и установить дополнительные модули (contrib).

    А теперь — подробнее.

    Не рекомендуется запускать сервер PostgreSQL от имени суперпользователя ОС. Поэтому — создадим для этого отдельного пользователя с помощью следующей команды:

    test@testPC:~/postgres$ sudo adduser postgres
    Adding user `postgres' ...
    Adding new group `postgres' (1001) ...
    Adding new user `postgres' (1001) with group `postgres' ...
    Creating home directory `/home/postgres' ...
    Copying files from `/etc/skel' ...
    New password:
    Retype new password:
    passwd: password updated successfully
    Changing the user information for postgres
    Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
    Is the information correct? [Y/n] y
    

    Нужно будет указать пароль и дополнительные параметры.

    Далее нужно создать директорию, где PostgreSQL будет хранить файлы баз данных и дополнительную информацию. Выполним команду создания директории:

    sudo mkdir /usr/local/pgsql/data

    /usr/local/pgsql/data — каталог с данными, можно указать любой. Я использую именно эту директорию.

    И теперь нужно поменять владельца этой директории, ведь PostgreSQL у нас работать будет под пользователем postgres:

    sudo chown postgres /usr/local/pgsql/data/

    После этого работаем от пользователя postgres. Переключиться на него можно с помощью следующей команды:

    sudo su - postgres

    Перед началом использования сервера, необходимо инициализировать кластер БД (подсказать PostgreSQL, что созданная выше директория будет являеться каталогом с данными сервера). Для этого используется утилита initdb.

    При моих настройках, нужно перейти в директорию, где находятся исполняемые файлы PostgreSQL (можно руками поменять этот путь, но мы ничего не меняли и оставили значение по умолчанию):

    cd /usr/local/pgsql/bin
    ls
    
    postgres@testPC:/usr/local/pgsql/bin$ ls
    clusterdb   pg_archivecleanup  pg_dump     	pg_rewind    	postmaster
    createdb	pg_basebackup  	pg_dumpall  	pg_test_fsync	psql
    createuser  pgbench        	pg_isready  	pg_test_timing   reindexdb
    dropdb  	pg_checksums   	pg_receivewal   pg_upgrade   	vacuumdb
    dropuser	pg_config      	pg_recvlogical  pg_verifybackup
    ecpg    	pg_controldata 	pg_resetwal 	pg_waldump
    initdb  	pg_ctl         	pg_restore  	postgres
    

    Все нужные нам команды — initdb, psql, pg_dump и другие.

    Но запускать эти команды просто так нельзя (без доп.настроек). Нужно зайти в эту директорию и запускать через точку: ./initdb; ./psql

    Чтобы было удобнее, необходимо настроить переменную окружения $PATH.

    $PATH — это переменная окружения, используемая для указания оболочке, где искать исполняемые файлы.

    Но — сначала убедимся, что (ну мало ли?) ничего не настроена. Попробуем выполнить команду инициализации кластера. В документации описаны ключи этой команды, самый главный здесь D — путь до директории с данными, которую создали на предыдущем шаге:

    initdb -k -D /usr/local/pgsql/data/
    
    postgres@testPC:/usr/local/pgsql/bin$ initdb -k -D /usr/local/pgsql/data/
    initdb: command not found
    

    Не настроено ничего. Но настроить довольно просто:

    export PATH=/usr/local/pgsql/bin/:$PATH

    Данной командой мы к переменной $PATH добавляем в начало путь до нашей директории с программами.

    А теперь снова проверим команду инициализации кластера:

    Вывод команды initdb:

    postgres@testPC:/usr/local/pgsql/bin$ initdb -k -D /usr/local/pgsql/data/
    The files belonging to this database system will be owned by user "postgres".
    This user must also own the server process.
    
    The database cluster will be initialized with locales
      COLLATE:  en_US.UTF-8
      CTYPE:	en_US.UTF-8
      MESSAGES: en_US.UTF-8
      MONETARY: ru_RU.UTF-8
      NUMERIC:  ru_RU.UTF-8
      TIME: 	ru_RU.UTF-8
    The default database encoding has accordingly been set to "UTF8".
    The default text search configuration will be set to "english".
    
    Data page checksums are enabled.
    
    fixing permissions on existing directory /usr/local/pgsql/data ... ok
    creating subdirectories ... ok
    selecting dynamic shared memory implementation ... posix
    selecting default max_connections ... 100
    selecting default shared_buffers ... 128MB
    selecting default time zone ... Europe/Moscow
    creating configuration files ... ok
    running bootstrap script ... ok
    performing post-bootstrap initialization ... ok
    syncing data to disk ... ok
    
    initdb: warning: enabling "trust" authentication for local connections
    You can change this by editing pg_hba.conf or using the option -A, or
    --auth-local and --auth-host, the next time you run initdb.
    
    Success. You can now start the database server using:
    
    	pg_ctl -D /usr/local/pgsql/data/ -l logfile start
    

    [свернуть]

    Всё отлично! Теперь можно запускать сервер (даже команду нам подсказали). Но я воспользуюсь самой минимальной записью этой команды:

    postgres@testPC:/usr/local/pgsql/bin$ pg_ctl start
    pg_ctl: no database directory specified and environment variable PGDATA unset
    Try "pg_ctl --help" for more information.
    

    Ой… Не заработало. Не сработала эта команда потому, что я важный ключ -D не указал (каталог с данными). Можно его руками прописать, в ключе. А можно настроить переменную окружения $PGDATA. Если она заполнена — то pg_ctl будет оттуда информацию забирать. Ну и наличие такой переменной — это удобно. Настроим следующим образом:

    export PGDATA=/usr/local/pgsql/data/

    И снова попробуем запустить сервер:

    postgres@testPC:/usr/local/pgsql/bin$ pg_ctl start
    waiting for server to start....2020-11-15 00:22:43.215 MSK [44295] LOG:  starting PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit
    2020-11-15 00:22:43.218 MSK [44295] LOG:  listening on IPv4 address "127.0.0.1", port 5432
    2020-11-15 00:22:43.224 MSK [44295] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
    2020-11-15 00:22:43.230 MSK [44296] LOG:  database system was shut down at 2020-11-15 00:12:50 MSK
    2020-11-15 00:22:43.234 MSK [44295] LOG:  database system is ready to accept connections
     done
    server started
    

    Сервер запустился. Подключимся к серверу с помощью psql`a:

    postgres@testPC:/usr/local/pgsql/bin$ psql
    psql (13.1)
    Type "help" for help.
    
    postgres=# select version();
                                               	version                     	 
                     	 
    ------------------------------------------------------------------------------------------------------
     PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1
    ~20.04) 9.3.0, 64-bit
    (1 row)
    
    postgres=#
    

    Всё работает! Установлена версия PostgreSQL 13.1. Если стрелку вверх нажать в psql — будут подставляться предыдущие команды, удобно.

    7. УСТАНОВКА РАСШИРЕНИЙ

    Давайте еще попробуем проверить, какие расширения сейчас доступны:

    postgres=# select * from pg_available_extensions order by name;
      name   | default_version | installed_version |       	comment       	 
    ---------+-----------------+-------------------+------------------------------
     plpgsql | 1.0         	| 1.0           	| PL/pgSQL procedural language
    (1 row)
    

    Всего одно расширение. Не густооооааа, так ведь расширения (лично я) и не ставил никакие!

    Давайте вы уже сами всё поставите. Команды такие:

    • Возвращаемся в суперпользователя ОС
    • cd ~/postgres/contrib
    • make
    • sudo make install

    А теперь вернемся в пользователя postgres:

    sudo su - postgres

    8. СОХРАНЕНИЕ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ

    И проверим доступные расширения. Запускаем psql:

    postgres@testPC:~$ psql
    
    Command 'psql' not found, but can be installed with:
    
    apt install postgresql-client-common
    Please ask your administrator.
    

    Ну что ж такое! Только что всё работало! Проверим ка мы переменную $PATH:

    postgres@testPC:~$ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
    

    Нет нашего адреса! Как так?

    А вот так — когда мы же создавали переменную окружения, мы создали её для текущего сеанса пользователя. Закрыли терминал — переменная исчезла. Нужно её создать и сохранить. Я использую следующий способ — сохранение переменных в файле .bashrc (это файл с командами, которые выполняются при запуске оболочки bash).

    Перейдите в домашнюю директорию пользователя postgres (для других пользователей можно сделать то же самое, так как .bashrc — это файл для конкретного пользователя) и проверьте, какие скрытые файлы там есть, точка в начале означает, что это скрытый файл:

    cd ~
    ls -a
    

    У меня вывод получился такой:

    postgres@testPC:~$ ls -a
    .   .bash_history  .bashrc  .local	.psql_history  .xscreensaver
    ..  .bash_logout   .config  .profile  .Xdefaults
    

    Не помню уже, кто и когда создал этот файл. Ну и ничего страшного. Если у вас такого файл нет — создайте его:

    touch .bashrc

    Открываем его любым удобным редактором на изменение (я использую nano):

    nano .bashrc

    И добавляем туда (в самый конец, если в файле уже что-то есть) объявление двух наших переменных окружения:

    export PATH=/usr/local/pgsql/bin/:$PATH
    export PGDATA=/usr/local/pgsql/data/
    

    Нажимаем Ctrl + x для выхода с сохранением, подтверждаем сохранения.

    Чтобы переменные применились — нужно повторно запустить bash — я вернулся в моего пользователя test, а потом снова зашел в postgres и запустил команду psql:

    test@testPC:~/postgres/contrib$ sudo su - postgres
    [sudo] password for test:
    postgres@testPC:~$ psql
    psql (13.1)
    Type "help" for help.
    
    postgres=#
    

    И проверим доступные расширения (ранее у нас было только одно, но вы же установили всё из папки /contrib?):

    postgres=# select count(1) from pg_available_extensions;
     count
    -------
    	41
    (1 row)
    

    Сорок одно доступное расширение! Вот теперь всё работает так, как я и хотел.

    9. ИТОГИ

    Мы поставили необходимые библиотеки для корректной установки PostgreSQL, установили сервер, осуществили необходимые настройки (стрелка вверх в psql работает), убедились в работоспособности PostgreSQL, установили все доступные расширения.

    Получилось очень много, но в одном месте.

    Configure: error: readline Library not found.
    Solution: Yum Install Readline-devel
    The detailed process is as follows:

    [[email protected] postgresql-9.2.24]# yum install readline-devel
    Loaded plugins: fastestmirror, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.163.com
     * extras: mirrors.163.com
     * updates: mirrors.163.com
    Setting up Install Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package readline-devel.i686 0:6.0-4.el6 will be installed
    --> Processing Dependency: ncurses-devel for package: readline-devel-6.0-4.el6.i686
    --> Running transaction check
    ---> Package ncurses-devel.i686 0:5.7-4.20090207.el6 will be installed
    --> Processing Dependency: ncurses-libs = 5.7-4.20090207.el6 for package: ncurses-devel-5.7-4.20090207.el6.i686
    --> Running transaction check
    ---> Package ncurses-libs.i686 0:5.7-3.20090208.el6 will be updated
    ---> Package ncurses-libs.i686 0:5.7-4.20090207.el6 will be an update
    --> Processing Dependency: ncurses-base = 5.7-4.20090207.el6 for package: ncurses-libs-5.7-4.20090207.el6.i686
    --> Running transaction check
    ---> Package ncurses-base.i686 0:5.7-3.20090208.el6 will be updated
    ---> Package ncurses-base.i686 0:5.7-4.20090207.el6 will be an update
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ===============================================================================================================================
     Package                           Arch                    Version                               Repository               Size
    ===============================================================================================================================
    Installing:
     readline-devel                    i686                    6.0-4.el6                             base                    134 k
    Installing for dependencies:
     ncurses-devel                     i686                    5.7-4.20090207.el6                    base                    641 k
    Updating for dependencies:
     ncurses-base                      i686                    5.7-4.20090207.el6                    base                     61 k
     ncurses-libs                      i686                    5.7-4.20090207.el6                    base                    249 k
    
    Transaction Summary
    ===============================================================================================================================
    Install       2 Package(s)
    Upgrade       2 Package(s)
    
    Total download size: 1.1 M
    Is this ok [y/N]: y
    Downloading Packages:
    (1/4): ncurses-base-5.7-4.20090207.el6.i686.rpm                                                         |  61 kB     00:00     
    (2/4): ncurses-devel-5.7-4.20090207.el6.i686.rpm                                                        | 641 kB     00:00     
    (3/4): ncurses-libs-5.7-4.20090207.el6.i686.rpm                                                         | 249 kB     00:00     
    (4/4): readline-devel-6.0-4.el6.i686.rpm                                                                | 134 kB     00:00     
    -------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                          311 kB/s | 1.1 MB     00:03     
    Running rpm_check_debug
    Running Transaction Test
    Transaction Test Succeeded
    Running Transaction
      Updating   : ncurses-base-5.7-4.20090207.el6.i686                                                                        1/6 
      Updating   : ncurses-libs-5.7-4.20090207.el6.i686                                                                        2/6 
      Installing : ncurses-devel-5.7-4.20090207.el6.i686                                                                       3/6 
      Installing : readline-devel-6.0-4.el6.i686                                                                               4/6 
      Cleanup    : ncurses-libs-5.7-3.20090208.el6.i686                                                                        5/6 
      Cleanup    : ncurses-base-5.7-3.20090208.el6.i686                                                                        6/6 
      Verifying  : ncurses-base-5.7-4.20090207.el6.i686                                                                        1/6 
      Verifying  : ncurses-libs-5.7-4.20090207.el6.i686                                                                        2/6 
      Verifying  : readline-devel-6.0-4.el6.i686                                                                               3/6 
      Verifying  : ncurses-devel-5.7-4.20090207.el6.i686                                                                       4/6 
      Verifying  : ncurses-libs-5.7-3.20090208.el6.i686                                                                        5/6 
      Verifying  : ncurses-base-5.7-3.20090208.el6.i686                                                                        6/6 
    
    Installed:
      readline-devel.i686 0:6.0-4.el6                                                                                              
    
    Dependency Installed:
      ncurses-devel.i686 0:5.7-4.20090207.el6                                                                                      
    
    Dependency Updated:
      ncurses-base.i686 0:5.7-4.20090207.el6                         ncurses-libs.i686 0:5.7-4.20090207.el6                        
    
    Complete!
    

    View installation results:

    [[email protected] postgresql-9.2.24]# ls -l /usr/include/ | grep readline
    drwxr-xr-x.  2 root root   4096 Apr  2 14:50 readline
    

    Read More:

    PostgreSQL can be installed by means of two ways

    1. Installing from source
    2. Installing binary packages

    NOTE: PostgreSQL 13 Installation on RedHat 7 and everything about PostgreSQL that root can do is found here

    In this tutorial, you will learn how to install PostgreSQL in Linux using source code.

    Step by Step PostgreSQL installation using binary packages is found here

    There are two steps involved in creating a PostgreSQL server.

    1. Preparing the setup with prerequisites.
    2. How to install PostgreSQL server.

    Preparing the setup with prerequisites

    Before we get into actual installation of PostgreSQL server we shall have to check the pre-requisites that are defined for PostgreSQL installation.

    The machine I am using for the entire tutorial is el6-64 Bit.

    [root@postgreshelp ~]# uname -a

    Linux postgreshelp 2.6.39400.17.1.el6uek.x86_64 #1 SMP Fri Feb 22 18:16:18 PST 2013 x86_64 x86_64 x86_64 GNU/Linux

    [root@postgreshelp ~]#

    Pre-requisite check to install PostgreSQL

    A basic installation of Linux would sufficiently enough to install PostgreSQL on Linux, however, we check the basic requirements.

    1. Make sure the GNU make version 3.80.

    [root@postgreshelp ~]# make —version

    GNU Make 3.81

    Copyright (C) 2006  Free Software Foundation, Inc.

    This is free software; see the source for copying conditions.

    There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A

    PARTICULAR PURPOSE.

    This program built for x86_64unknownlinuxgnu

    [root@postgreshelp ~]#

    2. A GNU C compiler. Recent versions of GCC are recommended.

    [root@postgreshelp ~]# rpm -qa gcc*

    gcc4.4.718.el6.x86_64

    gccc++4.4.718.el6.x86_64

    [root@postgreshelp ~]#

           3. tar is required to unpack the source distribution, in addition to either gzip or bzip2.

    Apart from these, there are two additional pre-requisites libraries which are recommended to have.

    They are.

    The GNU Readline library

    It allows psql (the PostgreSQL command line SQL interpreter) to remember each command you type, and allows you to use arrow keys to recall and edit previous commands. This is very helpful and is strongly recommended.

    If you don’t want to use it then you must specify the —without-readline option to configure

    [root@postgreshelp ~]# rpm -qa readline

    readline6.04.el6.x86_64

    [root@postgreshelp ~]#

    The zlib compression library

    zlib is a software library used for data compression

    If you don’t want to use it then you must specify the —without-zlib option to configure.

    [root@postgreshelp ~]# rpm -qa zlib

    zlib1.2.329.el6.x86_64

    [root@postgreshelp ~]#

    How to install a PostgreSQL database server – step by step:

    There are few advantages of installing PostgreSQL server using binaries. The main advantages include

    1. Split the binary and library directories and make sure that PostgreSQL does not integrate tightly into the existing OS and OS directories.
    2. Custom configure options, or some other options, to enable dtrace.
    3. Highly customizable.

    How to install PostgreSQL server

    Note: This below mentioned steps are applicable for any version you download from PostgreSQL site including PostgreSQL Version 13, Read more about PostgreSQL v13 Master Guide here.

    Step 1: Download the source code.

    Download PostgreSQL-9.6.8 binaries from the official PostgreSQL site or Click Here to download the source code.

    You should get a file named postgresql-9.6.8.tar.gz

    Step 2: Extract the tar archive

    gunzip postgresql9.6.8.tar.gz

    tar xvf postgresql9.6.8.tar

    This will create a directory called postgresql-9.6.8 containing the PostgreSQL source code.

    Go to the directory and open the file INSTALL which gives you insights on how to install postgresql in Linux.

    Following the steps mentioned in the INSTALL file will install the postgresql server, let’s have a look at the steps:

    Short Version

    ./configure

    make

    su

    make install

    adduser postgres

    mkdir /usr/local/pgsql/data

    chown postgres /usr/local/pgsql/data

    su postgres

    /usr/local/pgsql/bin/initdb D /usr/local/pgsql/data

    /usr/local/pgsql/bin/postgres D /usr/local/pgsql/data >logfile 2>&1 &

    /usr/local/pgsql/bin/createdb test

    /usr/local/pgsql/bin/psql test

    Now, we will try to understand each step in the document while doing the installation.

    Step 3: configure

    [root@postgreshelp postgresql9.6.8]# ./configure

    configure check your system to see if all libraries you need are present. It generates vital parts of the build infrastructure.

    The default configuration will build the server and utilities, as well as all client applications and interfaces that require only a C compiler.

    All files will be installed under /usr/local/pgsql by default.

    You can customize the build and installation process by supplying one or more commands mentioned here.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    [root@postgreshelp postgresql9.6.8]# ./configure

    checking build system type... x86_64pclinuxgnu

    checking host system type... x86_64pclinuxgnu

    checking which template to use... linux

    checking whether to build with 64bit integer date/time support... yes

    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

    ..

    ..

    ..

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

    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@postgreshelp postgresql9.6.8]#

    [root@postgreshelp postgresql9.6.8]#

    The successful configure should end as described above.

    In some cases, you might find that our operating system lacks libraries needed to compile PostgreSQL properly. Some of the most common candidates are libreadline-dev and zlib-dev (of course there are some more).

    In that case, the configure will show error as shown below.

    configure: error: readline library not found

    If you have readline already installed, see config.log for details on the

    failure.  It is possible the compiler isn‘t looking in the proper directory.

    Use —without-readline to disable readline support.

    [root@postgreshelp postgresql-9.6.8]#

    [OR]

    configure: error: zlib library not found

    If you have zlib already installed, see config.log for details on the

    failure.  It is possible the compiler isn’t looking in the proper directory.

    Use withoutzlib to disable zlib support.

    [root@postgreshelp postgresql9.6.8]#

    Step 4: Build a PostgreSQL.

    We can move forward and actually compile PostgreSQL, using the following commands one by one with root user.

    4.1 make

    [root@postgreshelp postgresql9.6.8]# su

    [root@postgreshelp postgresql9.6.8]# make

    make C src all

    make[1]: Entering directory `/root/postgresql9.6.8/src

    make -C common all

    ..

    ..

    make[1]: Leaving directory `/root/postgresql-9.6.8/config’

    <strong>All of PostgreSQL successfully made. Ready to install.</strong>

    4.2 make install

    [root@postgreshelp postgresql9.6.8]# make install

    make C src install

    make[1]: Entering directory `/root/postgresql9.6.8/src

    ..

    ..

    make[1]: Leaving directory `/root/postgresql-9.6.8/config’

    <strong>PostgreSQL installation complete.</strong>

    [root@postgreshelp postgresql9.6.8]

    This completes the PostgreSQL server installation.

    The build will take a few minutes depending on your hardware.

    If you want to scale out the build process to many CPU cores, you can use –j, shown as follows:

    make -j 8

    The -j 8 command will tell make to do up to 8 things in parallel, if possible. Adding parallelism to the build process will definitely speed up the process.

    Now we will move on to creating and configuring PostgreSQL database instance.

    Step 1: Add postgres user at OS level.

    [root@postgreshelp postgresql9.6.8]# adduser postgres

    [root@postgreshelp postgresql9.6.8]#

    Step 2: Create required directory for database files and assign required permissions.

    mkdir /u02/pgsql/data

    chown postgres /u02/pgsql/data

    [root@postgreshelp data]# mkdir /u02/pgsql/data

    [root@postgreshelp data]# chown postgres /u02/pgsql/data

    Step 3: initialize the database cluster

    create a new PostgreSQL database cluster using initdb command.

    syntax: initdb [option…] [—pgdata | -D] directory

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    [postgres@postgreshelp ~]$ /usr/local/pgsql/bin/initdb D /u02/pgsql/data

    The files belonging to this database system will be owned by user «postgres».

    This user must also own the server process.

    The database cluster will be initialized with locale «en_US.UTF-8».

    The default database encoding has accordingly been set to «UTF8».

    The default text search configuration will be set to «english».

    Data page checksums are disabled.

    fixing permissions on existing directory /u02/pgsql/data ... ok

    creating subdirectories ... ok

    selecting default max_connections ... 100

    selecting default shared_buffers ... 128MB

    selecting dynamic shared memory implementation ... posix

    creating configuration files ... ok

    running bootstrap script ... ok

    performing postbootstrap initialization ... ok

    syncing data to disk ... ok

    WARNING: enabling «trust» authentication for local connections

    You can change this by editing pg_hba.conf or using the option A, or

    authlocal and authhost, the next time you run initdb.

    Success. You can now start the database server using:

        <strong>/usr/local/pgsql/bin/pg_ctl D /u02/pgsql/data l logfile start</strong>

    [postgres@postgreshelp ~]$

    The above command initializes the postgres database cluster and installs reqired files under the data directory specified.

    Step 4: Start the database cluster:

    As given in the above step, we can now start the database cluster using the below command.

    [postgres@postgreshelp ~]$ /usr/local/pgsql/bin/pg_ctl D /u02/pgsql/data l logfile start

    server starting

    [postgres@postgreshelp ~]$

    This completes the PostgreSQL server installation along with PostgreSQL database cluster initialization.

    On the successful start of the database cluster, the following processes will run by default.

    [postgres@postgreshelp ~]$ ps ef | grep postgres

    root      20082   4435  0 20:28 pts/2    00:00:00 su postgres

    postgres  20083  20082  0 20:28 pts/2    00:00:00 bash

    postgres  20127      1  0 20:28 pts/2    00:00:00 /usr/local/pgsql/bin/postgres D /u02/pgsql/data

    postgres  20129  20127  0 20:28 ?        00:00:00 postgres: checkpointer process

    postgres  20130  20127  0 20:28 ?        00:00:00 postgres: writer process

    postgres  20131  20127  0 20:28 ?        00:00:00 postgres: wal writer process

    postgres  20132  20127  0 20:28 ?        00:00:00 postgres: autovacuum launcher process

    postgres  20133  20127  0 20:28 ?        00:00:00 postgres: stats collector process

    postgres  20137  20083  0 20:29 pts/2    00:00:00 ps ef

    postgres  20138  20083  0 20:29 pts/2    00:00:00 grep postgres

    [postgres@postgreshelp ~]$

    You will learn more about the processes here.

    We can then login to the default database called postgres with a default database user postgres using the following command

    $ psql

    [postgres@postgreshelp ~]$  /usr/local/pgsql/bin/psql

    psql (9.6.8)

    Type «help» for help.

    postgres=#

    postgres=#

    Further Reading:

    What actually happens when you do configure, make and make install?

    The entire process of behind the scenes is described here.

    Bonus: PostgreSQL 13 New Features Practical Master Guide is here.

    Words from postgreshelp

    Thank you for giving your valuable time to read the above information. I hope the content served your purpose in reaching out the blog.
    Suggestions for improvement of the blog are highly appreciable. Please contact us for any information/suggestion/feedback.

    If you want to be updated with all our articles

    please follow us on Facebook | Twitter
    Please subscribe to our newsletter.

    To install ReadLine, Readline-dev the development package, or turn off the ReadLine feature using the—without-readline option.

    #yum install readline;

    #yum install Readline-dev;

    ReadLine is the command line editor, close, you can not edit the command line directly with Psql, if the wrong instruction, can not roll back the command history, can only be re-entered manually.

    During the installation of PostgreSQL, a problem was encountered during the execution of the Configure

    In the process reported the following error, Configure:error:readline library not found, but I installed in the system
    ReadLine the bag,

    1. Environmental Information

    2. According to the instructions, test the next Configre command, and really reported this error
    [Email protected] postgresql-9.0.0]#./configure
    Checking build system Type … I686-pc-linux-gnu
    Checking host system Type … I686-pc-linux-gnu
    Checking which template to use … Linux
    Checking whether to build with 64-bit integer date/time support … yes
    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 WAL segment size … 16MB
    Checking for gcc … gcc
    Checking for C compiler default output file name … a.out
    Checking whether the C compiler works … yes
    Checking whether we is cross compiling … no
    Checking for suffix of executables …
    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 if gcc supports-wdeclaration-after-statement … yes
    Checking if gcc supports-wendif-labels … yes
    Checking if gcc supports-fno-strict-aliasing … yes
    Checking if gcc supports-fwrapv … yes
    Checking whether the C compiler still works … yes
    Checking how to run the C preprocessor … gcc-e
    Checking allow Thread-safe client libraries … yes
    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 Kerberos 5 support … no
    Checking whether to build with PAM 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 for grep that handles long lines and-e …/bin/grep
    Checking for egrep …/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’s possible to strip libraries … yes
    Checking for ar … Ar
    Checking for tar …/bin/tar
    Checking whether Ln-s works … yes
    Checking for gawk … gawk
    Checking for a thread-safe mkdir-p …/bin/mkdir-p
    Checking for bison … no
    Configure:warning:
    Without Bison you are not being able to build PostgreSQL from CVS 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 don’t need to worry on this, because the Bison
    Output is pre-generated.)
    Checking for flex … no
    Configure:warning:
    Without Flex you are not being able to build PostgreSQL from CVS 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 don’t need to worry on this because the Flex
    Output is pre-generated.)
    Checking for Perl …/usr/bin/perl
    Configure:using Perl 5.8.8
    Checking for main in-lm … yes
    Checking for library containing setproctitle … no
    Checking for library containing dlopen …-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 fdatasync … none required
    Checking for library containing gethostbyname_r … none required
    Checking for library containing shmget … none required
    Checking for-lreadline … no
    Checking for-ledit … no

    Configure:error:readline Library not found
    If you had readline already installed, see Config.log for details on the
    Failure. It is possible the compiler isnt looking in the proper directory.
    Use—without-readline to disable ReadLine support.

    According to the prompt, the ReadLine package should not be installed.

    3. Check if the system installs the ReadLine package
    [Email protected] postgresql-9.0.0]# Rpm-qa | grep ReadLine
    Readline-5.1-3.el5

    Note that the system already has the ReadLine package installed.

    4.  Search for related readline packages via yum
    [[email protected] postgresql-9.0.0]# yum Search ReadLine
    Lftp.i386:a sophisticated file transfer program
    lftp.i386:a sophisticated file transfer program
    Php-readline . I386:standard PHP Module provides readline library support
    lftp.i386:a sophisticated file transfer program
    Read LINE.I386:A Library for editing typed command lines.
    compat-readline43.i386:the readline 4.3 library for compatibility with older software.
    Readline-devel.i386:files needed to develop programs which use the ReadLine library.
    READLINE.I386:A Library for editing typed command lines.

    According to the tip, there is a package that causes attention to «readline-devel», speculation may be related to this package.

    5. Installing the Readline-devel package
    [Email protected] postgresql-9.0.0]# yum-y install-y readline-devel
    Setting up Install Process
    Parsing Package Install arguments
    Resolving Dependencies
    —Running Transaction check
    —> Package readline-devel.i386 0:5.1-3.el5 Set updated
    —processing dependency:libtermcap-devel for Package:readline-devel
    —Running Transaction check
    —> Package libtermcap-devel.i386 0:2.0.8-46.1 Set updated
    —Finished Dependency Resolution

    Dependencies resolved

    =============================================================================
    Package Arch Version Repository Size
    =============================================================================
    Installing:
    Readline-devel i386 5.1-3.el5 base 146 K
    Installing for dependencies:
    Libtermcap-devel i386 2.0.8-46.1 base + K

    Transaction Summary
    =============================================================================
    Install 2 package (s)
    Update 0 Package (s)
    Remove 0 Package (s)

    Total Download size:201 k
    Downloading Packages:
    (a): Libtermcap-devel-2 100% |=========================| KB 00:00
    (2/2): readline-devel-5.1 100% |=========================| 146 KB 00:00
    Running Rpm_check_debug
    Running Transaction Test
    Finished Transaction Test
    Transaction Test Succeeded
    Running Transaction
    Installing:libtermcap-devel ######################### [1/2]
    Installing:readline-devel ######################### [2/2]

    Installed:readline-devel.i386 0:5.1-3.el5
    Dependency installed:libtermcap-devel.i386 0:2.0.8-46.1
    complete!

    6. Execute configure successfully again.

    7. There is also a workaround: The Configure plus the parameter—without-readline, but this can not be entered in the command line, so it is not recommended …

    8. Configure after the success, then it’s make.

     9. After make is installed, the installation is successful and the interface appears as shown

    10. Modify the permissions of the PostgreSQL installation directory, the default installation directory under/usr/local/pgsql

    The Modify Permissions command is Chmod-r 777/usr/local/pgsql

    After running, all files under the Pgsql directory will have XWR (X: Executable, W: writable, R: readable) permissions. The-r parameter description in the command is recursive to the folder Pgsql directory and all files under the directory are modified to the appropriate permissions, 777 is the representative plus for this user, the user group of other users and not the group of users to increase XWR permissions.

    11. To this, PostgreSQL installation is complete, then you can try to use this open source database …

    1): First of all, initialize the database. Go to the folder that just installed PG/home/pg/postgr (this is the directory where I installed PG, the default installation directory is under/usr/local/pgsql), enter./bin/initdb–d. /data. The command format here also needs to be understood, especially-the meaning of parameters such as D. This will result in a data folder below the POSTGR.

    2): Start the database server./bin/postmaster–d./data&. The meaning of & need to understand, poor this symbol will lead to a certain problem, seemingly start the database server can also use another command:/bin/postgres-d./data or./bin/pg_ctl-d./data-l logfile Start The difference between these commands can be found in the manual or consult the TA.

    3): Under another command line, create a local database./bin/createdb TestDB, where TestDB is the database name. A folder is generated under the data directory

    4): Link database server/bin/psql testdb. At this point, enter help to get assistance. See

    5): Access the database. Here is the input SQL command, the future debugging of the entrance is here. When finished, press q to exit.

    6): Finally, shut down the database server./bin/pg_ctl stop–d./data.

    12.That ‘ s all!

    In addition, the following questions may be reported:

    ./configure—prefix=/usr/local/pgsql

    …..

    Configure:error:zlib Library not found
    If you had zlib already installed, see Config.log for details on the
    Failure. It is possible the compiler «t looking in the proper directory.
    Use—without-zlib to disable zlib support.

    Workaround

    Yum install zlib-devel;

    Reference:

    Http://www.cnblogs.com/shuaixf/archive/2011/11/29/2268292.html

    Http://www.cnblogs.com/shuaixf/archive/2011/11/29/2268298.html

    Alibaba Cloud Hot Products

    Elastic Compute Service (ECS) Dedicated Host (DDH) ApsaraDB RDS for MySQL (RDS) ApsaraDB for PolarDB(PolarDB) AnalyticDB for PostgreSQL (ADB for PG)
    AnalyticDB for MySQL(ADB for MySQL) Data Transmission Service (DTS) Server Load Balancer (SLB) Global Accelerator (GA) Cloud Enterprise Network (CEN)
    Object Storage Service (OSS) Content Delivery Network (CDN) Short Message Service (SMS) Container Service for Kubernetes (ACK) Data Lake Analytics (DLA)

    ApsaraDB for Redis (Redis)

    ApsaraDB for MongoDB (MongoDB) NAT Gateway VPN Gateway Cloud Firewall
    Anti-DDoS Web Application Firewall (WAF) Log Service DataWorks MaxCompute
    Elastic MapReduce (EMR) Elasticsearch

    Alibaba Cloud Free Trail

    Понравилась статья? Поделить с друзьями:
  • Configure error please reinstall readline i cannot find readline h
  • Configure error please install the libedit development package
  • Configure error please install gnu make it is required to build asterisk
  • Configure error perl module extutils embed is required
  • Configure error patch is required to configure bundled pjproject