【问题标题】:How do I start enterpiseDB PostgreSQL on Mac OSX 10.6.8?如何在 Mac OS X 10.6.8 上启动 enterpriseDB PostgreSQL?
【发布时间】:2013-08-01 00:30:23
【问题描述】:

Mac OSX 10.6.8

postgres 网站说 postgres 9.2+ 与 Mac OSX 10.6+ 兼容,所以我在这里下载了 Mac OSX 安装程序的 9.2.4 版本:

http://www.enterprisedb.com/products-services-training/pgdownload

我接受了所有默认值,所以 postgres 安装在目录中:

/Library/PostgreSQL/9.2

(如果您正在为 Rails 开发安装 postgres,为了安装 pg gem,您需要添加到您的 PATH:http://excid3.com/blog/installing-postgresql-and-pg-gem-on-mac-osx/#.UfkImuB6gy5

现在,我正在尝试弄清楚如何使用 postgres。我发现一个stackoverflow线程说你可以用这个命令启动postgres:

~$ /Library/PostgreSQL/9.2/bin/pg_ctl start -D /Library/PostgreSQL/9.2/data -l postgres.log

但这会产生这个错误:

pg_ctl: 无法打开 PID 文件 “/Library/PostgreSQL/9.2/data/postmaster.pid”:权限被拒绝

如果我使用 sudo 尝试相同的命令:

~$ sudo /Library/PostgreSQL/9.2/bin/pg_ctl start -D /Library/PostgreSQL/9.2/data -l postgres.log

我收到此错误:

pg_ctl: cannot be run as root 请以 拥有服务器进程的(非特权)用户。

这到底是什么意思??

另一个 SO 线程说,为了响应该错误,您应该这样做:

$ sudo -u postgres bash

产生这个输出:

Password:
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
bash: /Users/7stud/.bashrc: Permission denied
bash-3.2$ 

那里的错误是怎么回事?

【问题讨论】:

    标签: ruby-on-rails-4 railstutorial.org postgresql-9.2


    【解决方案1】:

    遇到并解决的错误列表:

    1. shell-init:检索当前目录时出错:getcwd:无法访问父目录:权限被拒绝

    2. pg_config 错误

    3. 库未加载:libpq.5.dylib

    4. fe_sendauth:未提供密码

    5. pg_ctl:未指定数据库目录且未设置环境变量 PGDATA

    6. pg_ctl:服务器没有关闭

    7. (PG::错误)

    A) 预安装:

    当您单击 .dmg 文件开始安装时,会打开一个对话窗口,并且安装程序旁边有一个 README 文件。读那个。我按规定更改了共享内存:

    $ sudo vi /etc/sysctl.conf
    
    On a MacBook Pro with 2GB of RAM, the author's sysctl.conf contains:
    
    kern.sysv.shmmax=1610612736
    kern.sysv.shmall=393216
    kern.sysv.shmmin=1
    kern.sysv.shmmni=32
    kern.sysv.shmseg=8
    kern.maxprocperuid=512
    kern.maxproc=2048
    

    我将文件向下滚动到 k 并将列出的每一行更改为指定的值。然后你需要重启你的电脑。

    B) 安装和使用 PostgreSQL:

    然后再次单击 .dmg 文件,然后单击安装程序并安装 postgres。我接受了所有默认值。

    据我所知,postgres 安装程序仅将目录 /Library/PostgreSQL/9.2 的权限授予名为“postgres”的用户。在 postgres 安装期间,安装程序要求输入数据库超级用户的密码,如果您想知道数据库超级用户的名称是什么,那就是“postgres”。

    当您发出 sudo 命令时,您会暂时更改为用户“root”。但是,root 用户无权访问目录 /Library/PostgreSQL/9.2。所以你必须使用 su 命令(切换用户)来更改为 postgres 用户。但是为了发出 su 命令,您需要是 root 用户。知道了?

    因此,每当您发出 postgres 命令时,您都需要先执行此操作:

    $ cd /Library/PostgreSQL/9.2
    $ sudo su postgres
    Password: <normal sudo password>
    

    这样的错误:

    ~$ sudo su postgres
    shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
    

    是由于您试图切换到 postgres 用户没有权限的目录中的用户 postgres 引起的,据我所知,除 /Library/PostgreSQL/9.2 之外的每个目录

    正确切换到postgres用户后:

    $ cd /Library/PostgreSQL/9.2
    $ sudo su postgres
    Password: <normal sudo password>
    

    你会得到一个有趣的提示。就我而言,它看起来像这样:

    bash-3.2$ 
    

    如果你发出 ls 命令:

    bash-3.2$ ls
    bin             installer           scripts
    data                lib             share
    doc             pgAdmin3.app            stackbuilder.app
    include             pg_env.sh           uninstall-postgresql.app
    

    你可以推测你在 /Library/PostgreSQL/9.2 目录下。

    EnterpriseDB 安装程序在安装完成后会自动为您启动 postgres 服务器。 如果您需要启动服务器,例如您已关闭计算机,请参阅下面第 5 步中的“您可以从命令行停止或启动服务器”。

    C) 使用 pgAdmin3 连接到服务器:
    我花了几个小时试图弄清楚如何启动服务器并且通常只是使用 postgres 而没有运气。然后我碰巧在目录 /Library/PostgreSQL/9.2 中看到了一个叫做 pgAdmin3 的东西。我点击了它,然后打开了一个带有多个窗格的窗口。

    在 pgAdmin3 窗口的左窗格中,它显示:

    Server Groups
    --Servers(1)
    ----PostgresSQL 9.2 (localhost:5432)
    

    我单击“PostgreSQL 9.2 (localhost:5432)”将其突出显示,然后右键单击以调出菜单,然后选择连接。出现提示时,我输入了数据库超级用户密码。

    D) 设置 Rails 以使用 PostgreSQL:
    然后我按照本教程中的说明进行 Rails 设置:

    https://pragtob.wordpress.com/2012/09/12/setting-up-postgresql-for-ruby-on-rails-on-linux/#comment-1142

    如下:

    1) 第一步是创建一个新用户。
    如果您使用与您的 mac 用户名相同的名称,那么您不必在 rails 应用程序中的 database.yml 文件中添加用户名(或密码):

    $ cd /Library/PostgreSQL/9.2
    $ sudo su postgres
    Password: <normal sudo password>
    bash-3.2$ createuser --interactive 7stud
    Shall the new role be a superuser? (y/n) n
    Shall the new role be allowed to create databases? (y/n) y
    Shall the new role be allowed to create more new roles? (y/n) n
    Password:<database superuser password>
    bash-3.2$
    

    这会创建一个没有密码的新用户。

    接下来,在 pgAdmin3 中点击:

    ---Login Roles(1)
    

    将其突出显示,然后单击窗口顶部的“刷新所选对象”图标,您将看到显示的新用户。

    createuser 的 postgres 文档在这里:

    http://www.postgresql.org/docs/9.2/interactive/app-createuser.html

    还有一个dropuser命令:

    bash-3.2$ dropuser 7stud
    

    2) 然后将“pg”gem 添加到您的 Gemfile,并注释掉 sqlite gem。

    3) 然后尝试使用 Bundler 安装 pg gem:

    rails_projects/sample_app/$ bundle install --without production
    

    当我尝试这样做时,我收到了“pg_config”错误。为了解决这个错误,我遵循了这里的建议:

    http://excid3.com/blog/installing-postgresql-and-pg-gem-on-mac-osx/#.UftQUOB6gy6

    并将 /Library/PostgreSQL/9.2 添加到我的 PATH 中(我在 .bashrc 中执行所有 PATH 操作。)。不要忘记 'source' .bashrc 或退出终端并重新启动终端以使新的 PATH 生效。

    然后我就可以正确安装 pg gem:

    rails_projects/sample_app/$ bundle install --without production
    rails_projects/sample_app/$ bundle update
    rails_projects/sample_app/$ bundle install
    

    (我真的不明白为什么你必须执行所有这三个命令,但这就是 railstutorial 所做的。)

    4) 接下来更改您的 config/database.yml 文件。
    对于每个部分:测试、开发和生产更改“适配器”和“数据库”行,并添加“编码”行,例如:

    development:
      adapter: postgresql
      database: ArbitaryDatabaseName (e.g. sampleapp_dev)
      encoding: utf8
    
      pool: 5
      timeout: 5000
    

    确保所有三个数据库行指定不同的名称。

    5) 然后尝试创建数据库:

    rails_projects/sample_app/$ bundle exec rake db:create:all
    

    当我尝试这样做时,我得到了错误:

    dlopen(/Users/7stud/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/pg-0.15.1/lib/pg_ext.bundle, 9): Library not loaded: libpq.5.dylib
    Library not loaded: libpq.5.dylib
      Referenced from: /Users/7stud/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/pg-0.15.1/lib/pg_ext.bundle
    

    库 libpq.5.dylib 位于

    /Library/PostgreSQL/9.2/lib
    

    使用此处的建议:

    https://github.com/PostgresApp/PostgresApp/issues/109

    我通过将以下内容添加到我的 .bashrc 文件中解决了该错误(或者您可以将其放入 .bash_profile):

    export DYLD_FALLBACK_LIBRARY_PATH="/Library/PostgreSQL/9.2/lib:$DYLD_LIBRARY_PATH"
    

    (记得 'source' .bashrc 或退出终端并启动一个新的终端窗口。)

    然后我再次尝试创建数据库:

    rails_projects/sample_app/$ bundle exec rake db:create:all
    fe_sendauth: no password supplied …
    

    要解决这个爆炸性错误,您需要更改目录中的 pg_hba.conf 文件

    /Library/PostgreSQL/9.2/data 
    

    你不能使用 Finder 进入那​​个目录——你必须使用 postgres 用户进入那个目录:

    $ cd /Library/PostgreSQL/9.2
    $ sudo su postgres
    Password: <normal sudo password>
    bash-3.2$ cd data
    bash-3.2$ ls
    PG_VERSION  pg_hba.conf pg_notify   pg_subtrans postgresql.conf
    base        pg_ident.conf   pg_serial   pg_tblspc   postmaster.opts
    global      pg_log      pg_snapshots    pg_twophase postmaster.pid
    pg_clog     pg_multixact    pg_stat_tmp pg_xlog
    
    bash-3.2$ mvim pg_hba.conf  
    (or instead of mvim open with another text editor, e.g. vim)
    

    在 .conf 文件中,您需要将 'md5' 更改为 'trust':

    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # "local" is for Unix domain socket connections only
    local   all             all                                     trust  #md5
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            trust  #md5
    # IPv6 local connections:
    host    all             all             ::1/128                 trust  #md5
    # Allow replication connections from localhost, by a user with the
    # replication privilege.
    #local   replication     postgres                                md5
    #host    replication     postgres        127.0.0.1/32            md5
    #host    replication     postgres        ::1/128                 md5
    

    访问方法“md5”表示数据库需要指定数据库用户的加密密码。但是当您创建新用户时,您创建它时没有密码。 access METHOD 'trust' 意味着数据库不需要密码。

    然后我再次尝试创建数据库:

    rails_projects/sample_app/$ bundle exec rake db:create:all
    fe_sendauth: no password supplied …
    

    为了让服务器读取我在 .conf 文件中所做的更改,我在 pgAdmin3 中断开了与服务器的连接:

    Server Groups
    --Servers(1)
    ----PostgresSQL 9.2 (localhost:5432)
    
    Click on PostgresSQL 9.2 (localhost:5432) to highlight it, 
    right click, then select Disconnect,
    then right click and select Connect.
    

    但显然这行不通。断开和重新连接到服务器不会导致服务器重新加载 .conf 文件。要让服务器重新加载 .conf 文件,您可以在 pgAdmin3 中右键单击 PostgresSQL 9.2 (localhost:5432) 并选择:

    Reload configuration
    

    或者您可以从命令行停止然后启动服务器:
    (注意以下命令假设您已经切换到 postgres 用户,请参阅上面的“安装和使用 PostgreSQL”。)

    bash-3.2$ cd /Library/PostgreSQL/9.2/
    bash-3.2$ pg_ctl stop  (First disconnect from the server in pgAdmin3)
    

    但是,这产生了错误:

    pg_ctl: no database directory specified and environment variable PGDATA unset
    Try "pg_ctl --help" for more information.
    

    我这样解决了这个错误:

    bash-3.2$ export PGDATA=/Library/PostgreSQL/9.2/data
    bash-3.2$ echo $PGDATA 
    /Library/PostgreSQL/9.2/data
    bash-3.2$ pg_ctl stop  
    waiting for server to shut down.... done
    server stopped
    bash-3.2$ pg_ctl start
    server starting
    

    如果你没有先在 pgAdmin3 中断开与服务器的连接,你会得到输出:

    bash-3.2$ pg_ctl stop
    waiting for server to shut down............................................................... failed
    pg_ctl: server does not shut down
    HINT: The "-m fast" option immediately disconnects sessions rather than
    waiting for session-initiated disconnection.
    bash-3.2$
    

    后来,当我打开 rails 控制台时,我无法关闭服务器。我使用User.create(....) 在数据库中添加了一个用户,但我忘记事先启动 postgres,所以我想知道该记录会发生什么。出于某种原因,postgress 服务器已经在我的系统上运行(似乎每次我启动计算机时 postgress 都会启动——在下面解决)。接下来,我试图停止服务器,但我无法停止。关闭 rails 控制台后,服务器停止。

    终于没有错误了:

    ~/rails_projects/sample_app4_0$ bundle exec rake db:create:all
    ~/rails_projects/sample_app4_0$ bundle exec rake db:migrate
    ~/rails_projects/sample_app4_0
    

    我猜这意味着创建了数据库。如果您查看 pgAdmin3,您应该能够看到三个新数据库(尽管它们上面有红色的 x)。如果看不到它们,请右键单击 Databases 目录(在 pgAdmin3 中)并选择 Refresh。

    编辑:我后来遇到了一些问题。要全面测试一切是否正常,请参见此处:

    How do I get my rails app to use my postgresql db?

    6) 卫兵/Spork
    当我启动我的 Guard/Spork 组合时:

    ~/rails_projects/sample_app4_0$ bundle exec guard
    

    我收到了这个错误:

    ...
    ...
    Preloading Rails environment
    Loading Spork.prefork block...
    FATAL:  the database system is shutting down
     (PG::Error)
    

    我通过启动 postgres 服务器并使用 pgAdmin3 连接到服务器来解决此问题。

    最终,我想出了如何让 postgres 服务器在每次启动计算机时都不启动。我必须做出两个改变:

    1) $ sudo vim /Library/LaunchDaemons/com.edb.launchd.postgresql-9.2.plist
    用你的 postgres 版本代替 9.2。

    2) 找到 RunAtLoad 行

    3) 将下一行从&lt;true/&gt; 更改为&lt;false/&gt;

    https://superuser.com/questions/244589/prevent-postgresql-from-running-at-startup

    仅这些步骤对我不起作用。然后我找到了这个建议:

    4)$ sudo launchctl unload -w /Library/LaunchDaemons/com.edb.launchd.postgresql-9.2.plist

    用你的 postgres 版本代替 9.2。

    http://www.postgresql.org/message-id/flat/4B41FD48.7030009@enterprisedb.com#4B41FD48.7030009@enterprisedb.com

    【讨论】:

      猜你喜欢
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 2012-01-06
      • 1970-01-01
      • 2013-09-23
      相关资源
      最近更新 更多