环境:

PostgreSQL服务器所在操作系统为:linux

客户端有两个,一个是linux下的:psql

另一个是Windows xp下的:Navicat Premium

发现问题:

在psql中用“create database $数据库名称;”创建数据库时,发现报错:

ERROR:  source database "template1" is being accessed by other users

DETAIL:  There is 1 other session using the database.

详细见下图:

分析问题:

有错误信息可以看出,模板数据库template1正在被其他用户访问,所以不能在创建数据库时以它为模版进行创建,后台通过“ps -ef|grep postg”,见下图:

从上图可以看出,模板数据库“template1”正在被客户端“192.168.20.104(1666)”访问。这里,需要明白三个问题:

一是,在创建数据库时为什么跟模板数据库template1扯上了关系?

二是,postmaster与postgres进程之间的关系?

三是:“192.168.20.104(1666)”是谁?

先看第一个,原来Postgresql在用initdb创建数据库集群时,将创建一个模板数据库template1,以后所有的数据库都将来源于模板数据库template1,其中也包括模板数据库template0.

换句话说,template1和templat0用于创建数据库,即Postgresql中用从模板数据库复制的方式创建一个新的数据库,而template1就是创建数据库的默认模板。

所以如果用户在创建数据库时不为数据库指定模板,那么将使用template1模板数据库。这便是对问题一的回答,下面来看第二个问题“postmaster与postgres进程之间的关系?”。

原来,postmaster是运行在服务器上的主进程(也称监听守护进程),而postgres是postmaster的子进程,这一点从上图中进行号也可以看出来(27113是postmaster的进程号,而27122是postmaster子进程之一),那么postmaster主进程在什么情况下将开启一个子进程呢?

首先,客户端想访问服务器中某数据库,客户端将调用接口库(如ODBC、libpq等)将用户的请求通过网络发送给主进程postmaster。

接着,当postmaster接收到客户端发送过来的用户请求后,它将启动一个新的后端进程postgres为用户服务,此后,postmaster就将与客户端的交互工作交由postgres服务进程,而有postgres来完成客户端所需要的各种操作。

说完postmaster与postgres进程之间的关系,再来看看“192.168.20.104(1666)”究竟是谁?

在Windows xp的dos窗口中,用“ipconfig”查看到的地址是就是“192.168.20.104”,详见下图:

用Navicat Premium客户端连接Postgresql服务器,连接配置如下图:

看到初始数据库为:template1,一旦用户创建好连接并连接上之后,postmaster主进程就会为客户端192.168.20.104启动一个postgres服务进程(postgres: postgres template1 192.168.20.104(2168) idle)用于与客户端进行交互。

注意:

1.IP地址后括弧中的数字为端口(随机分配一个未用的)

2.初始数据库不一定非要为模板数据库template1,可以任意指定一个已存在于Postgresql服务器中的数据库

解决问题:

通过以上分析,其实要解决这几个问题有以下几种方案:

1.Linux中重启PostgreSQL服务器进程(/etc/rc.d/init.d/postgresql restart)后,再在psql中用“create database $数据库名称;”创建数据库。注:不推荐使用这一方案。

2.关闭Windows xp下的Navicat Premium客户端关于连接到PostgreSQL服务器的连接,然后再在psql中用“create database $数据库名称;”创建数据库。见下图:

3.在linux服务器中用“kill -9 $进程号”杀死PostgreSQL服务进程(本例中的进程号为27122),然后再在psql中用“create database $数据库名称;”创建数据库。

4.在创建数据库时指定模板数据库为template0,指定方式在psql客户端中用“create database $数据库名称 with template=template0;”(中的with可有 可无),在shell命令行(请先切换到postgres用户)中用“createdb $数据库名称 -T template0”或“createdb $数据库名称 --template=template0”均可,“-T或--template”含义见下图:

参考:http://hi.baidu.com/11haiou/item/1a86304b3c40f2c1c1a592bb

PostgreSQL创建数据库时报错:ERROR: source database template1 is being accessed by other users相关推荐

  1. ERROR: source database template1 is being accessed by other users解决方法

    postgresql创建新库时报错,显示其他用户正在访问模板库"template1",详细信息如下: postgres=# create database cctest;ERROR ...

  2. mysql 创建数据库时报错 error 1044

    自从有了叁贰壹的教程,妈妈再也不用担心我的学习了 报错 error 1044 : Access denied for user ''@'localhost' to database 'mysql' 编 ...

  3. PostgreSQL创建数据库报错

    ERROR:source database "template1"is being accessed by other users DETAIL:There are 2 other ...

  4. mysql导入sql文件、数据库时报错ERROR: ASCII ‘\0‘ appeared in the statement

    mysql导入sql文件.数据库时报错ERROR: ASCII '\0' appeared in the statement

  5. PostGreSql工作笔记003---在Navicat中创建数据库时报错rolcatupdate不存在_具体原因看其他博文_这里使用pgAdmin4创建管理postgre

    JAVA技术交流QQ群:170933152 在PostgreSQL中,可以使用CREATE DATABASE命令创建数据库. 语法: CREATE DATABASE database_name; SQ ...

  6. Mysql导入数据库时报错ERROR: Unknown command '\0'

    文章目录 前言 测试环境 数据库版本 系统版本 问题出现过程 问题结果过程 总结 前言 之前查询数据问题时多次使用过数据库导出导入命令,从来没发生过这种错误,那是一个风和日丽的上午,忽然来了一个紧急的 ...

  7. mysql导入sql文件、数据库时报错ERROR: ASCII '\0' appeared in the statement

    window环境下mysql导入sql文件时报错:ERROR: ASCII '\0' appeared in the statement 错误原因 文件编码不正确 解决办法 下载UltraEdia对文 ...

  8. 宝塔面板创建数据库时报错数据库管理密码错误处理方案

    这个是由于我们刚创建数据的时候root数据库默认密码未生效,才会出现这种错误(往往刚安装面板使用数据库会出现这种问题).其他什么修改mysql配置我还没使用过,这种方法目前对于刚使用面板和数据库往往有 ...

  9. idea连接mysql数据库时报错‘The specified database user/password combination is rejected‘

    尝试解决的办法: 检查用户名.密码和端口都没错,mysql本身没有问题 以为database那里不能空,也填上了要引入的数据库名字,没用 ..... 最终的解决办法: "Advanced&q ...

最新文章

  1. python画熊猫代码_用Python Turtle 画可爱的熊猫
  2. ASPNET揭秘笔记之三
  3. QtCreator与catkin命令两种方式开发ROS程序(图示加代码)
  4. eclipse java 生成api_怎样使用Eclipse在Java中实现自己的API
  5. C# 如何判断系统是64位还是32位
  6. java 线程 handler,java.lang.RuntimeException:处理程序(android.os.Handler)在死线程上向处理程序发送消息...
  7. 实现nav_微信小程序——沉浸式导航栏实现(含iphoneX适配和组件封装)
  8. C/C++[sort( )]排序
  9. ROS树莓派小车暑假记录(二)
  10. 详解相机的sensor工作原理
  11. 小米bl未解锁变砖了如何刷机_如何正确刷机
  12. jupyter 下进行markdown
  13. STM32 BOR/POR/PDR介绍
  14. 电脑死机什么导致,带你一次性了解所有导致电脑死机蓝屏原因!
  15. jquery解绑、绑定笔记
  16. 【解决方案】STM32L152单片机驱动段码LCD屏,执行HAL_LCD_Init函数失败返回HAL_TIMEOUT,长时间卡在LCD_FLAG_RDY的while循环里面的解决办法
  17. Ceph集群搭建及其运用(块存储、ceph文件系统)
  18. OpenStack常用运维命令手册-V1.0-黑夜青儿
  19. 计算机病毒是可以自我繁殖的特殊程序,计算机基础试题及答案
  20. 靶机渗透之Wakanda

热门文章

  1. PHP程序员突破成长瓶颈
  2. IDC_ Pro_Env _CentOS 5.4_Open×××
  3. 需要注意变量作用域的使用
  4. softmax函数_数学证明深度学习激活函数从Softmax到Sparsemax
  5. 数据结构与算法分析c++第四版_研分享 | 人工智能学院数据结构与算法分析考研备考整理...
  6. python字符串find函数实现_python中实现查找字符串的find函数
  7. DPDK — PDUMP 抓包工具
  8. Openstack 中的消息总线 AMQP
  9. 苹果开源Swift底层非阻塞I/O框架SwiftNIO
  10. qcom Android Camera【转】