zoukankan      html  css  js  c++  java
  • USE_PGXS 在 extension 编译中的作用

    postgresql 在编译 extension时经常要使用 pgxs,如下:

    # source /var/lib/pgsql/.bash_profile
    # USE_PGXS=1 make  
    # USE_PGXS=1 make install 

    下面简单分析一下:

    某个具体 contrib 的 Makefile文件

    # PGXS build needs PostgreSQL 9.2 or later. Earlier versions didn't install
    # plpgsql.h, so you needed the full source tree to access it.
    ifdef USE_PGXS
    PG_CONFIG = pg_config
    PGXS := $(shell $(PG_CONFIG) --pgxs)
    include $(PGXS)
    else
    subdir = contrib/xxoo
    top_builddir = ../..
    include $(top_builddir)/src/Makefile.global
    include $(top_srcdir)/contrib/contrib-global.mk
    endif

    下面这句话很关键:
    PGXS build needs PostgreSQL 9.2 or later

    查看pg_config

    $ which pg_config
    /usr/pgsql-9.6/bin/pg_config
    
    $ pg_config
    BINDIR = /usr/pgsql-9.6/bin
    DOCDIR = /usr/pgsql-9.6/doc
    HTMLDIR = /usr/pgsql-9.6/doc/html
    INCLUDEDIR = /usr/pgsql-9.6/include
    PKGINCLUDEDIR = /usr/pgsql-9.6/include
    INCLUDEDIR-SERVER = /usr/pgsql-9.6/include/server
    LIBDIR = /usr/pgsql-9.6/lib
    PKGLIBDIR = /usr/pgsql-9.6/lib
    LOCALEDIR = /usr/pgsql-9.6/share/locale
    MANDIR = /usr/pgsql-9.6/share/man
    SHAREDIR = /usr/pgsql-9.6/share
    SYSCONFDIR = /etc/sysconfig/pgsql
    PGXS = /usr/pgsql-9.6/lib/pgxs/src/makefiles/pgxs.mk
    CONFIGURE = '--enable-rpath' '--prefix=/usr/pgsql-9.6' '--includedir=/usr/pgsql-9.6/include' '--mandir=/usr/pgsql-9.6/share/man' '--datadir=/usr/pgsql-9.6/share' '--libdir=/usr/pgsql-9.6/lib' '--with-perl' '--with-python' '--with-tcl' '--with-tclconfig=/usr/lib64' '--with-openssl' '--with-pam' '--with-gssapi' '--with-includes=/usr/include' '--with-libraries=/usr/lib64' '--enable-nls' '--with-uuid=e2fs' '--with-libxml' '--with-libxslt' '--with-ldap' '--with-system-tzdata=/usr/share/zoneinfo' '--sysconfdir=/etc/sysconfig/pgsql' '--docdir=/usr/pgsql-9.6/doc' '--htmldir=/usr/pgsql-9.6/doc/html' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' 'LDFLAGS=-Wl,--as-needed'
    CC = gcc
    CPPFLAGS = -DFRONTEND -D_GNU_SOURCE -I/usr/include/libxml2 -I/usr/include
    CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic
    CFLAGS_SL = -fPIC
    LDFLAGS = -L../../src/common -Wl,--as-needed -L/usr/lib64 -Wl,--as-needed -Wl,-rpath,'/usr/pgsql-9.6/lib',--enable-new-dtags
    LDFLAGS_EX = 
    LDFLAGS_SL = 
    LIBS = -lpgcommon -lpgport -lxslt -lxml2 -lpam -lssl -lcrypto -lgssapi_krb5 -lz -lreadline -lrt -lcrypt -ldl -lm  
    VERSION = PostgreSQL 9.6.8
    
    $ pg_config --pgxs
    /usr/pgsql-9.6/lib/pgxs/src/makefiles/pgxs.mk

    查看pgxs.mk

    $ ls -l /usr/pgsql-9.6/lib/pgxs/src/makefiles/pgxs.mk
    -rw-r--r-- 1 root root 8068 Feb 27 08:54 /usr/pgsql-9.6/lib/pgxs/src/makefiles/pgxs.mk
    
    $ cat /usr/pgsql-9.6/lib/pgxs/src/makefiles/pgxs.mk
    # PGXS: PostgreSQL extensions makefile
    
    # src/makefiles/pgxs.mk
    
    # This file contains generic rules to build many kinds of simple
    # extension modules.  You only need to set a few variables and include
    # this file, the rest will be done here.
    #
    # Use the following layout for your Makefile:
    #
    #   [variable assignments, see below]
    #
    #   PG_CONFIG = pg_config
    #   PGXS := $(shell $(PG_CONFIG) --pgxs)
    #   include $(PGXS)
    #
    #   [custom rules, rarely necessary]
    #
    # Set one of these three variables to specify what is built:
    #
    #   MODULES -- list of shared-library objects to be built from source files
    #     with same stem (do not include library suffixes in this list)
    #   MODULE_big -- a shared library to build from multiple source files
    #     (list object files in OBJS)
    #   PROGRAM -- an executable program to build (list object files in OBJS)
    #
    # The following variables can also be set:
    #
    #   EXTENSION -- name of extension (there must be a $EXTENSION.control file)
    #   MODULEDIR -- subdirectory of $PREFIX/share into which DATA and DOCS files
    #     should be installed (if not set, default is "extension" if EXTENSION
    #     is set, or "contrib" if not)
    #   DATA -- random files to install into $PREFIX/share/$MODULEDIR
    #   DATA_built -- random files to install into $PREFIX/share/$MODULEDIR,
    #     which need to be built first
    #   DATA_TSEARCH -- random files to install into $PREFIX/share/tsearch_data
    #   DOCS -- random files to install under $PREFIX/doc/$MODULEDIR
    #   SCRIPTS -- script files (not binaries) to install into $PREFIX/bin
    #   SCRIPTS_built -- script files (not binaries) to install into $PREFIX/bin,
    #     which need to be built first
    #   REGRESS -- list of regression test cases (without suffix)
    #   REGRESS_OPTS -- additional switches to pass to pg_regress
    #   EXTRA_CLEAN -- extra files to remove in 'make clean'
    #   PG_CPPFLAGS -- will be added to CPPFLAGS
    #   PG_LIBS -- will be added to PROGRAM link line
    #   SHLIB_LINK -- will be added to MODULE_big link line
    #   PG_CONFIG -- path to pg_config program for the PostgreSQL installation
    #     to build against (typically just "pg_config" to use the first one in
    #     your PATH)
    #
    # Better look at some of the existing uses for examples...

    pgxs 是 postgrsql 9.2 之后针对编译 extension 的解决方案。如果是之前的版本,就需要 postgresql full source 完全编译。
    所以,有还在使用 postgrsql 9.2之前版本的小伙伴们赶紧升级了,毕竟 postgresl 11 beta 已经开始公测了。

    参考:
    http://postgres.cn/docs/9.6/extend-pgxs.html

  • 相关阅读:
    分布式事务框架seata入门
    生活==不易
    LR Socket接收超时TPS上不去解决方法
    Loadrunner拼装(并发用户)唯一值方法
    shell/Python复制文件和文件夹
    redis可以设置过期key回调实现延时队列
    计算机USB读写权限统一管理(在域环境中)
    微软Win10最新BUG_2021年9月15日_KB5005565更新之后打印机突然连接不上 或 不能打印0x0000011b(附解决方案)!
    SQLServer中update没带where的回滚操作(Update或者Delete误操作恢复方法)
    107.如何用Windows Defender全盘扫描
  • 原文地址:https://www.cnblogs.com/ctypyb2002/p/9792977.html
Copyright © 2011-2022 走看看