Postgresql:如何启动数据库服务器并创建数据库

Posted

技术标签:

【中文标题】Postgresql:如何启动数据库服务器并创建数据库【英文标题】:PostgresQL: how to start up the database server and create a database 【发布时间】:2012-10-05 13:03:07 【问题描述】:

当我尝试运行服务器时:

postgres@ubuntu:~$ /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
LOG:  could not bind IPv4 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
WARNING:  could not create listen socket for "localhost"
FATAL:  could not create any TCP/IP sockets postgres@ubuntu:~$ 

然后我将用户更改为我自己:

postgres@ubuntu:~$ su - michael

michael@ubuntu:~$  sudo netstat -tulpn | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      959/postgres 

好吧,postgres 似乎正在监听端口,这似乎是问题所在。

让我们将 pack 更改为 postgres 并尝试终止此进程:

postgres@ubuntu:~$ kill `cat /usr/local/pgsql/data/postmaster.pid`

反应是:

cat: /usr/local/pgsql/data/postmaster.pid: No such file or directory
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

你能推荐我如何进行吗?

【问题讨论】:

【参考方案1】:

首先,获取正在运行的 Postgres pid:

ps -ef | grep postmaster | grep -v grep | awk 'print $2'

然后杀死它

kill <the_pid_you_just_got>

但除非您尝试使用 Postgres(多个实例...)做一些非常特别的事情,否则您应该使用 sudo /etc/init.d/postgresql stop 停止它> (或 sudo /etc/init.d/postgres stop)并使用 sudo /etc/init.d/postgresql start

启动它

Postgres 作为服务 运行,因此它有一个服务控制文件/脚本负责正确启动和停止它。这些控制文件过去位于 /etc/init.d 中,但我必须承认,随着服务管理系统(init、upstart、systemd...)的数量不断增加,这些文件变得有些混乱了

【讨论】:

好吧,我试过 ps -ef | grep 邮政局长 | awk '打印 $1'。在用户 michael 下,它显示 michael。好吧,我按照你的建议停止了 Postgres。现在没有什么可以监听端口了。我听不懂你关于开始的评论。所以,我删除了数据目录。然后我从 /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data 开始。反应是:创建目录/usr/local/pgsql/data ... initdb:无法创建目录“/usr/local/pgsql/data”:权限被拒绝。之前我通过 sudo 手动创建了数据目录。现在: /usr/local$ ls -l 结果 drwxr-xr-x 6 root root 4096 Oct 5 17:25 pgsql。也许我应该从头开始,使用另一个目录而不是 /usr/local? 当我运行这个命令时,我得到了 502 。所以我然后执行了命令kill 502,但随后得到了错误-bash: kill: (502) - No such process 每次运行第一个命令时都会得到不同的 ps id 建议的行是错误的,将显示 grep 进程本身。正确的版本是ps -ef | grep postmaster | grep -v grep | awk 'print $2'。如果这是空白,则没有任何名为 postmaster 的运行。

以上是关于Postgresql:如何启动数据库服务器并创建数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在Postgresql中创建序列数并应用在数据表

Docker启动PostgreSQL时创建多个数据库

Postgresql数据库部署之:Postgresql本机启动和Postgresql注册成windows 服务

免安装PostgreSQL启动服务及创建数据库

如何在 postgresql 中为数据库创建用户? [关闭]

postgresql和mysql的区别