在研究从另一个过程调用一个过程与在 Postgres 13 中重复代码对性能的影响时,我发现您可以使用 或 来调用其他CALL过程PERFORM。
我用谷歌搜索差异,但我发现的唯一相似的事情是
哪些地址PERFORMvs.哪些地址EXECUTE不PERFORMvs. CALL.
有谁知道有什么区别?我应该使用哪一个(当从 PL/pgSQL 过程调用过程时)?
我是码头工人的新手.我仍然试图绕过这一切.
我正在构建一个节点应用程序(REST api),使用Postgresql来存储我的数据.
我花了几天时间学习码头工具,但我不确定我是否按照我应该的方式做事.
所以这是我的问题:
我正在使用官方docker postgres 9.5映像作为基础来构建我自己的(我的Dockerfile只在它上面添加了plpython,并安装了一个自定义python模块以便在plpython存储过程中使用).我创建了我的容器作为postgres图像文档的建议:
docker run --name some-postgres -e POSTGRES_PASSWORD = mysecretpassword -d postgres
在我停止容器之后,我无法使用上面的命令再次运行它,因为容器已经存在.所以我开始使用docker start而不是docker run.这是正常的做事方式吗?我一般会在第一次使用docker run并且每隔一段时间启动docker吗?
持久性:我创建了一个数据库并在正在运行的容器上填充它.我使用pgadmin3进行连接.我可以停止并启动容器并保持数据,但我不确定为什么或如何发生这种情况.我可以在Dockerfile中看到官方postgres图像创建了一个卷(VOLUME/var/lib/postgresql/data),但我不确定这是继续工作的原因.你能否简要解释(或指出一个解释)这一切是如何运作的?
架构:从我读到的,似乎这种应用程序最合适的架构是运行3个独立的容器.一个用于数据库,一个用于持久化数据库数据,一个用于节点应用程序.这是一个很好的方法吗?如何使用数据容器改进事物?AFAIK我当前的设置没有一个正常工作.
还有什么我应该注意的吗?
谢谢
编辑:加入我的困惑,我刚刚从debian官方图片中运行了一个新容器(没有Dockerfile,只有docker run -i -t -d -name debtest debian/bin/bash).随着容器在后台运行,我使用docker attach debtest连接到它,然后继续apt-get install postgresql.一旦安装,我运行(仍然从容器内)psql并在默认的postgres数据库中创建一个表,并用1个记录填充它.然后我退出shell,容器自动停止,因为shell不再运行了.我使用docker start debtest启动容器,然后附加到它,最后再次运行psql.我发现自第一次运行以来一切都持续存在.安装了Postgresql,我的桌子就在那里,而且我所插入的记录也在那里.我真的很困惑为什么我需要一个VOLUME来保存数据,因为这个快速测试没有使用一个,所有的东西都可以很好地工作.我在这里错过了什么吗?
再次感谢
我正在尝试扩展官方docker postgres图像,以便安装自定义python模块,以便我可以使用plpython3存储过程.
这是我的dockerfile
FROM postgres:9.5
RUN apt-get update && apt-get install -y postgresql-plpython3-9.5 python3
ADD ./repsug/ /opt/smtnel/repsug/
WORKDIR /opt/smtnel/repsug/
RUN ["python3", "setup.py", "install"]
WORKDIR /
Run Code Online (Sandbox Code Playgroud)
我的问题是:我需要在我的Dockerfile中添加ENTRYPOINT和CMD命令吗?或者它们是从基础图像"继承"的?
官方readme.md中的示例显示了Dockerfile,它只更改了语言环境,没有ENTRYPOINT或CMD.
我还在自述文件中读到,我可以通过执行自定义sh和/或sql脚本来扩展图像.我应该使用此功能而不是创建自定义图像吗?在这种情况下的问题是我如何确保脚本只在"安装时"运行一次,而不是每次都运行?我的意思是,如果已经创建并填充了数据库,我不想覆盖它.
谢谢,Awer
我有一张类似于此的表
timestamp val
2017-05-04 06:00:00 2
2017-05-04 08:00:00 3
2017-05-04 09:35:00 5
2017-05-04 10:05:00
2017-05-04 11:15:00 8
2017-05-04 12:10:00
2017-05-04 13:35:00 12
Run Code Online (Sandbox Code Playgroud)
我想在val字段中的第一个null之前找到记录(示例表中的时间戳为09:35).
是否有捷径可寻?
谢谢
编辑:使用postgres 9.5 EDIT2:对不起每个人我忘了提到有时候没有空值,在这种情况下我只需要最大时间戳.到目前为止提供的答案在这种情况下不起作用(对于原始问题中的松散解释再次感到遗憾)