Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在容器内停止postgresql server?_Postgresql_Docker_Kubernetes - Fatal编程技术网

如何在容器内停止postgresql server?

如何在容器内停止postgresql server?,postgresql,docker,kubernetes,Postgresql,Docker,Kubernetes,我需要在运行的容器中升级postgresql数据库。为此,我需要停止旧服务器,以便启动新服务器。问题是,我没有找到如何停止运行postgres进程的方法,例如systemctl、pg_ctl或服务 pg_控制: root@postgres-7ffd788bc9-g2dkv:/# su postgres $ pg_ctl status sh: 1: pg_ctl: not found 系统控制: root@postgres-7ffd788bc9-g2dkv:/# systemctl status

我需要在运行的容器中升级postgresql数据库。为此,我需要停止旧服务器,以便启动新服务器。问题是,我没有找到如何停止运行postgres进程的方法,例如systemctl、pg_ctl或服务

pg_控制:

root@postgres-7ffd788bc9-g2dkv:/# su postgres
$ pg_ctl status
sh: 1: pg_ctl: not found
系统控制:

root@postgres-7ffd788bc9-g2dkv:/# systemctl status postgresql
bash: systemctl: command not found
服务(不返回任何内容):

postgresql是使用以下kubernetes yaml创建的:

    spec:
      containers:
        - name: postgres
          image: postgres:10.4
服务器正在运行:

root@postgres-7ffd788bc9-g2dkv:/# psql postgresql://user:pass@127.0.0.1:5432/postgresdb
psql (12.5 (Debian 12.5-1.pgdg90+1), server 10.4 (Debian 10.4-2.pgdg90+1))
Type "help" for help.
postgresdb=# select VERSION();
                                                             version                                                              
----------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 10.4 (Debian 10.4-2.pgdg90+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit
(1 row)

你建议怎么做?

停止容器,在yaml中更改版本,然后重建如何?

停止容器,在yaml中更改版本,然后重建如何?

我最后做的是在Kubernetes中创建一个并行postgres pod,其中保存新版本。然后我从旧服务器转储数据库,将其复制到新服务器,并使用它初始化那里的数据库

以下是一个接一个的步骤:

  • 使用新版本创建并行postgres服务

  • 在旧版本pod中:

  • 在主机中:
  • ssh到新的pod

  • 我需要的额外步骤,因为出于某种原因,新pod没有用户创建的“postgres”: 使用您的凭据进入postgres客户端:

  • 然后退出postgres并退出到普通用户

  • 最后更新数据库:

  • 最后,我在库伯内特斯创建了一个并行的postgres吊舱,其中包含了新版本。然后我从旧服务器转储数据库,将其复制到新服务器,并使用它初始化那里的数据库

    以下是一个接一个的步骤:

  • 使用新版本创建并行postgres服务

  • 在旧版本pod中:

  • 在主机中:
  • ssh到新的pod

  • 我需要的额外步骤,因为出于某种原因,新pod没有用户创建的“postgres”: 使用您的凭据进入postgres客户端:

  • 然后退出postgres并退出到普通用户

  • 最后更新数据库:

  • 更改yaml中的版本不起作用,因为数据目录是由PostgreSQL版本10初始化的,该版本与12.5版不兼容。如果您运行
    brew PostgreSQL升级数据库
    ,如回答中所述:我认为来自Lajos的链接可能是解决方案。您需要在data dir上启动升级过程,然后用新版本重新构建容器。我正在尝试在postgres pod中安装brew,但安装脚本需要sudo,而且它在映像中不存在。@justadev您的容器中是否有高度特权的用户?在yaml中更改版本无效,因为数据目录是由PostgreSQL版本10初始化的,这与12.5版不兼容@justadev如果您运行
    brew postgresql升级数据库
    ,如回答中所述:我认为Lajos的链接可能是解决方案。您需要在data dir上启动升级过程,然后用新版本重新构建容器。我正在尝试在postgres pod中安装brew,但安装脚本需要sudo,而且它不存在于图像中。@justadev您的容器中是否有高度特权的用户?docker容器通常只执行一项任务。假设您从docker repo获取了默认的Postgres容器,这意味着停止容器等同于停止服务。事实上,如果您使用SSH登录到容器,您可能会发现停止服务会导致容器停止。就像@Marc Salvetti在回答中提到的那样,停止容器并重建。如果容器中有数据(这不是好的做法),则需要首先备份所述数据。docker容器通常只执行一项任务。假设您从docker repo获取了默认的Postgres容器,这意味着停止容器等同于停止服务。事实上,如果您使用SSH登录到容器,您可能会发现停止服务会导致容器停止。就像@Marc Salvetti在回答中提到的那样,停止容器并重建。如果容器中有数据(这不是好的做法),则需要首先备份所述数据。
    root@postgres-7ffd788bc9-g2dkv:/# psql postgresql://user:pass@127.0.0.1:5432/postgresdb
    psql (12.5 (Debian 12.5-1.pgdg90+1), server 10.4 (Debian 10.4-2.pgdg90+1))
    Type "help" for help.
    postgresdb=# select VERSION();
                                                                 version                                                              
    ----------------------------------------------------------------------------------------------------------------------------------
     PostgreSQL 10.4 (Debian 10.4-2.pgdg90+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit
    (1 row)
    
    pg_dumpall -U postgresadmin -h localhost -p 5432 > dumpall.sql
    
    kubectl cp postgres-old-pod:/dumpall.sql dumpall.sql
    kubectl cp dumpall.sql postgres2-new-pod:/dumpall.sql
    
    psql postgresql://postgresadmin:pass1234@127.0.0.1:5432/postgresdb?sslmode=disable
    postgresdb=# CREATE ROLE postgres LOGIN SUPERUSER PASSWORD 'somepassword123';
    
    psql -U postgres -W -f dumpall.sql