postgresql plv8 安装
网上可以看到pg 9.6 版本的plv8容器镜像,没有pg 高版本的支持镜像,但是在基于原有dockerfile 进行构建的时候,居然失败了,有墙的问题,有版本的问题
所以通过虚拟机尝试下构建方式安装以及对于碰到问题的解决
说明centos 系统不太好使,安装起来有点费事,使用的Debian
安装pg
pg11
- pg repo
touch /etc/apt/sources.list.d/pgdg.list
deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
- 安装
apt-get install postgresql-11 postgresql-server-dev-11
- 配置pg_Config
可选,默认会自动配置,对于多环境的可能需要,可以结合find locate 工具查找
构建
- 预备
apt install git pkg-config libc++-dev libc++abi-dev
- clone 代码
wget https://github.com/plv8/plv8/archive/v2.3.9.tar.gz
- 构建
tar -xvzf v2.3.9.tar.gz
cd plv8-2.3.9
make
make install
使用
- 启动扩展
CREATE EXTENSION plv8;
- 简单函数
CREATE OR REPLACE FUNCTION plv8_eval_test()
RETURNS text AS $$
var result = eval("1+2")
return JSON.stringify(result);
$$ LANGUAGE plv8 IMMUTABLE STRICT;
- 调用
select * from plv8_eval_test();
- 效果
docker 镜像
- Dockerfile
文件内容来自 https://raw.githubusercontent.com/clkao/docker-postgres-plv8/master/10-2/Dockerfile
v2.1.0
FROM postgres:10
MAINTAINER Chia-liang Kao <clkao@clkao.org>
ENV PLV8_VERSION=v2.1.0 \
PLV8_SHASUM="207d712e919ab666936f42b29ff3eae413736b70745f5bfeb2d0910f0c017a5c v2.1.0.tar.gz"
RUN buildDependencies="build-essential \
ca-certificates \
curl \
git-core \
python \
postgresql-server-dev-$PG_MAJOR" \
&& apt-get update \
&& apt-get install -y --no-install-recommends ${buildDependencies} \
&& mkdir -p /tmp/build \
&& curl -o /tmp/build/${PLV8_VERSION}.tar.gz -SL "https://github.com/plv8/plv8/archive/$PLV8_VERSION.tar.gz" \
&& cd /tmp/build \
&& echo ${PLV8_SHASUM} | sha256sum -c \
&& tar -xzf /tmp/build/${PLV8_VERSION}.tar.gz -C /tmp/build/ \
&& cd /tmp/build/plv8-${PLV8_VERSION#?} \
&& sed -i 's/\(depot_tools.git\)/\1; cd depot_tools; git checkout 46541b4996f25b706146148331b9613c8a787e7e; rm -rf .git;/' Makefile.v8 \
&& make static \
&& make install \
&& strip /usr/lib/postgresql/${PG_MAJOR}/lib/plv8.so \
&& cd / \
&& apt-get clean \
&& apt-get remove -y ${buildDependencies} \
&& apt-get autoremove -y \
&& rm -rf /tmp/build /var/lib/apt/lists/*
v2.3.8
# Docker image for PostgreSQL with the plv8 extensions installed
# Note: building plv8 from source takes a long time, and will timeout with Docker Hub's
# automated builds. See the main Dockerfile for an image that uses pre-built binaries
# (built using this Dockerfile.build)
# Provided by Ionx Solutions: https://www.ionxsolutions.com
# Begin by building plv8
FROM postgres:11.2 AS build
ENV PLV8_VERSION 2.3.8
ENV PLV8_SHASUM="b3ffb95daeb21b17bc5670f372403879dfad7eee86e0152e4da763ffd16fbf07 ${PLV8_VERSION}.tar.gz"
RUN buildDeps="curl build-essential ca-certificates git python gnupg libc++-dev libc++abi-dev pkg-config glib2.0 postgresql-server-dev-$PG_MAJOR" \
&& apt-get update \
&& apt-get install -y --no-install-recommends libc++1 ${buildDeps} \
&& echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
&& apt-get update \
&& apt-get install -y --no-install-recommends libc++1 postgresql-server-dev-$PG_MAJOR \
&& git config --global user.email "nobody@example.com" \
&& git config --global user.name "nobody" \
&& mkdir -p /tmp/build \
&& curl -o /tmp/build/${PLV8_VERSION}.tar.gz -SL "https://github.com/plv8/plv8/archive/v${PLV8_VERSION}.tar.gz" \
&& cd /tmp/build \
&& echo ${PLV8_SHASUM} | sha256sum -c \
&& tar -xzf /tmp/build/${PLV8_VERSION}.tar.gz -C /tmp/build/ \
&& cd /tmp/build/plv8-${PLV8_VERSION} \
&& sed -i '104i%.bc : %.cc\n\t$(COMPILE.cxx.bc) $(CCFLAGS) $(CPPFLAGS) -fPIC -c -o $@ $<\n' Makefile.shared \
&& make static \
&& make install \
&& cd / \
&& rm -rf /tmp/build \
&& apt-get remove -y --purge ${buildDeps} \
&& apt-get autoremove -y --purge \
&& rm -rf /var/lib/apt/lists/
v2.3.9
FROM postgres:11.2
ENV PLV8_VERSION=v2.3.9
RUN buildDependencies="curl build-essential ca-certificates git python gnupg libc++-dev libc++abi-dev pkg-config glib2.0 postgresql-server-dev-$PG_MAJOR" \
&& apt-get update \
&& apt-get install -y --no-install-recommends libc++1 ${buildDependencies} \
&& mkdir -p /tmp/build \
&& curl -o /tmp/build/${PLV8_VERSION}.tar.gz -SL "https://github.com/plv8/plv8/archive/$PLV8_VERSION.tar.gz" \
&& cd /tmp/build \
&& tar -xzf /tmp/build/${PLV8_VERSION}.tar.gz -C /tmp/build/ \
&& cd /tmp/build/plv8-${PLV8_VERSION#?} \
&& make static \
&& make install \
&& cd / \
&& apt-get clean \
&& apt-get remove -y ${buildDependencies} \
&& apt-get autoremove -y \
&& rm -rf /tmp/build /var/lib/apt/lists/*
几个问题
- v8 代码包的问题
主要是墙的问题,合理上网解决 - make: * No rule to make target 'plv8.bc', needed by 'all
参考 https://github.com/plv8/plv8/issues/304 使用高版本,比如我使用2.3.9 ,在测试2.3.8 版本的时候碰到的此问题 - undefined symbol: getmissingattr
这个是因为pg版本的问题,主要是在2.3.8 集成pg 11 的时候,当时使用的11.1 后边发现是11.2 才支持的
参考资料
https://github.com/plv8/plv8
https://github.com/clkao/plv8x
https://github.com/plv8/plv8/issues/304
https://github.com/clkao/docker-postgres-plv8
postgresql plv8 安装的更多相关文章
- Postgresql ---plv8扩展(windows下安装过程)
Postgresql下plv8安装过程其实很简单,但是在网络上搜集了半天都没有找到一篇满意的安装文档,现在总结如下: 1.下载和PostgreSQL相对应的plv8版本,下载地址如下: http:// ...
- Mac 下 PostgreSQL 的安装与使用
在 mac 下,可以利用 homebrew 直接安装 PostgreSQL: 1 brew install postgresql -v 稍等片刻,PostgreSQL 就安装完成.接下来就是初始数据库 ...
- Linux下的PostgreSQL简单安装手册
1. 安装环境 linux版本: CentOS release 6.2 (Final) pg版本 : postgresql-9.5.0 2. pg数据库下载地址 --http ...
- CentOS 6.3下PostgreSQL 的安装与配置
一.简介 PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统.有些特性甚至连商业数据库都不具备.这个起源于伯克 ...
- postgresql编译安装与调试(二)
接前文postgresql编译安装与调试(一),继续说说postgresql的编译安装与调试. 上一篇已经详细说明了如何在Linux系统上编译安装postgresql,这次我们在此基础上简单讲讲如何在 ...
- [转] Mac 下 PostgreSQL 的安装与使用
在 mac 下,可以利用 homebrew 直接安装 PostgreSQL: 1 brew install postgresql -v 稍等片刻,PostgreSQL 就安装完成.接下来就是初始数据库 ...
- postgresql数据库安装及简单操作
自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的首选. 本文介绍PostgreSQL的安装和基本用法,供初次使用者上手.以下内容基于Debian操作系统,其他操作系 ...
- PostgreSQL+PostGIS安装以及使用
安装,参照: https://www.cnblogs.com/ytwy/p/6817179.html 创建企业级地理文件数据库时报错," You must copy the lates ...
- PostgreSQL编译安装
PostgreSQL编译安装 安装语言包 ### PostgreSQL 初始化过程中,会读取操作系统字符编码, ### 若程序需要使用zh_CN.utf-8字符编码,需要在PostgreSQL 初始化 ...
随机推荐
- python 爬取媒体文件(无防火墙)
#coding = utf-8 import requests import pandas as pd import os,time root_path = './根目录/' input_file = ...
- 面向对象之isinstance与issubclass(python内置方法)
isinstanceissubclass TOC isinstance 判断一个对象是否是另外一个类的实例,返回布尔值. 是:True 否:False class Foo: pass class Bo ...
- Reimage Isilon cluster,结果忘记了修改管理口的netmask,怎么办?
网页打不开了,正常的SSH也连不上,只能用串口,连接到节点上. 然后使用运行下面的命令来修改netmask: isi network subnets modify groupnet0.subnet0 ...
- Docker 部署ELK之Sentinl日志报警
前篇文章简单介绍了Docker 部署ELK,以及使用filebeat收集java日志.这篇我们介绍下日志报警配置,这里我们使用Sentinl插件. 1.修改kibana参数 进入elk容器,修改对应参 ...
- Runtime.addShutdownHook()(译)
序言: 每一个Java程序都可以为JVM增加一个关闭钩子.JVM将在关闭之前执行关闭钩子中的指令. 问题: 一个程序可能需要在退出前执行一些指令.程序可能由于下列原因而退出: 所有的线程已经执行完毕 ...
- 兼容 .NET Core3.0, Natasha 框架实现 隔离域与热编译操作
关于 Natasha 动态构建已经成为了封装者们的家常便饭,从现有的开发趋势来看,普通反射性能之低,会迫使开发者转向EMIT/表达式树等构建方式,但是无论是EMIT还是表达式树,都会依赖于反射的 ...
- validateField方法对部分表单字段进行校验
原文:https://blog.csdn.net/qq_37782076/article/details/85123602 代码 <template> <div class=&quo ...
- bash信号捕捉
我们ping一个主机,然后按下ctrl+c那么就会终止这个ping动作,如下图: 可是如果使用一个循环来逐个ping不同主机,你再按下ctrl+c就会发现停不下来,直到循环完成,如下图: #!/bin ...
- 【案例】电子生产中的排程问题如何解决?APS助力智能化排产
共进电子是典型的消费类电子制造企业,以ODM业务为主,立足双O(OEM/ODM),发展自主品牌.其中,生产模式特点包括: 批量制造.多品种小批量.面向订单生产: 产品结构复杂,设计变更频繁:生产计划复 ...
- 【Java_基础】Java中强制类型转换
首先,狭义上的强制类型转换指的是引用类型,且是父类向子类转换,这种转换只牵扯到引用名义类型的转换,具体的对象内存没有发生一点变化. 而基本类型的转换与此不同,其数据确实发生了变化.如果是基本类型和其包 ...