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.
Содержание
- How to Solve configure: error: readline library not found when Installing PostgreSQL
- Introduction
- Solution
- configure: error: readline library not found #354
- Comments
- Установка 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?
- Skip the Install YugaByte DB step since I will be using the binaries from the build. Is this ok?
- Do Create Local Cluster step.
- Test YCQL API step.
- 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
Процесс установки из исходного кода состоит из трех этапов:
- Конфигурирование — запуск команды ./configure . Эта команда ищет необходимые библиотеки и заголовочные файлы, осуществляет настройку особых параметров и подключается дополнительные библиотеки (описанные выше —without-параметры из этой области). В результате работы создается файлы Makefiles, содержащий всю необходимую информацию для сборки, его можно просмотреть в текстовом редакторе.
- Сборка (компиляция) — запуск команды make . Запускается компиляция программы из исходного кода. При работе используется Makefiles, в которых описаны все параметры сборки приложения. Результат работы — собранная программа в текущей директории.
- Установка — команда 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
А теперь вернемся в пользователя postgres:
8. СОХРАНЕНИЕ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ
И проверим доступные расширения. Запускаем psql:
Ну что ж такое! Только что всё работало! Проверим ка мы переменную $PATH:
Нет нашего адреса! Как так?
А вот так — когда мы же создавали переменную окружения, мы создали её для текущего сеанса пользователя. Закрыли терминал — переменная исчезла. Нужно её создать и сохранить. Я использую следующий способ — сохранение переменных в файле .bashrc (это файл с командами, которые выполняются при запуске оболочки bash).
Перейдите в домашнюю директорию пользователя postgres (для других пользователей можно сделать то же самое, так как .bashrc — это файл для конкретного пользователя) и проверьте, какие скрытые файлы там есть, точка в начале означает, что это скрытый файл:
У меня вывод получился такой:
Не помню уже, кто и когда создал этот файл. Ну и ничего страшного. Если у вас такого файл нет — создайте его:
Открываем его любым удобным редактором на изменение (я использую nano):
И добавляем туда (в самый конец, если в файле уже что-то есть) объявление двух наших переменных окружения:
Нажимаем Ctrl + x для выхода с сохранением, подтверждаем сохранения.
Чтобы переменные применились — нужно повторно запустить bash — я вернулся в моего пользователя test, а потом снова зашел в postgres и запустил команду psql:
И проверим доступные расширения (ранее у нас было только одно, но вы же установили всё из папки /contrib?):
Сорок одно доступное расширение! Вот теперь всё работает так, как я и хотел.
Мы поставили необходимые библиотеки для корректной установки PostgreSQL, установили сервер, осуществили необходимые настройки (стрелка вверх в psql работает), убедились в работоспособности PostgreSQL, установили все доступные расширения.
Источник
Comments
yugabyte-ci
pushed a commit
that referenced
this issue
Jul 4, 2018
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
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
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).
Когда-то я рассказал про установку Ubuntu на VirtualBox. Настала пора рассказать про установку PostgreSQL из исходных кодов.
Сразу приступаем (считаю, что виртуальная или реальная машина с Ubuntu у вас уже имеется).
Что нас ждет:
- Информация о стенде
- Настройка операционной системы
- Получение исходного кода PostgreSQL
- До установки PostgreSQL
- Установка PostgreSQL
- Настройки для работы с PostgreSQL
- Установка расширений
- Сохранение переменных окружения
- Итоги
Уфф, сам удивился, что получилось очень много. Погнали!
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/
Можно прямо с этой страницы код нужной ветки скачать, но мы поступим по другому:
Сначала установим специальную утилиту 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 посмотреть:
Теперь нужно переключиться на нужную ветку. Для этого существует команда 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
Процесс установки из исходного кода состоит из трех этапов:
- Конфигурирование — запуск команды ./configure. Эта команда ищет необходимые библиотеки и заголовочные файлы, осуществляет настройку особых параметров и подключается дополнительные библиотеки (описанные выше —without-параметры из этой области). В результате работы создается файлы Makefiles, содержащий всю необходимую информацию для сборки, его можно просмотреть в текстовом редакторе.
- Сборка (компиляция) — запуск команды make. Запускается компиляция программы из исходного кода. При работе используется Makefiles, в которых описаны все параметры сборки приложения. Результат работы — собранная программа в текущей директории.
- Установка — команда 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
- Installing from source
- 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.
- Preparing the setup with prerequisites.
- 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.39—400.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.
- 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_64—unknown—linux—gnu [root@postgreshelp ~]# |
2. A GNU C compiler. Recent versions of GCC are recommended.
[root@postgreshelp ~]# rpm -qa gcc* gcc—4.4.7—18.el6.x86_64 gcc—c++—4.4.7—18.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 readline—6.0—4.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 zlib—1.2.3—29.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
- Split the binary and library directories and make sure that PostgreSQL does not integrate tightly into the existing OS and OS directories.
- Custom configure options, or some other options, to enable dtrace.
- 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 postgresql—9.6.8.tar.gz tar xvf postgresql—9.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 postgresql—9.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 postgresql—9.6.8]# ./configure checking build system type... x86_64—pc—linux—gnu checking host system type... x86_64—pc—linux—gnu checking which template to use... linux checking whether 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 .. .. .. 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 postgresql—9.6.8]# [root@postgreshelp postgresql—9.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 —without—zlib to disable zlib support. [root@postgreshelp postgresql—9.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 postgresql—9.6.8]# su [root@postgreshelp postgresql—9.6.8]# make make —C src all make[1]: Entering directory `/root/postgresql—9.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 postgresql—9.6.8]# make install make —C src install make[1]: Entering directory `/root/postgresql—9.6.8/src‘ .. .. make[1]: Leaving directory `/root/postgresql-9.6.8/config’ <strong>PostgreSQL installation complete.</strong> [root@postgreshelp postgresql—9.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 postgresql—9.6.8]# adduser postgres [root@postgreshelp postgresql—9.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 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: <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 |