如何在Mac OS X 10.6.8上启动enterpriseDB PostgreSQL?

时间:2013-07-31 12:58:47

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

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:无法以root身份运行请登录(使用例如“su”)作为   (非特权的)将拥有服务器进程的用户。

这意味着什么?

另一个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$ 

那里的错误是怎么回事?

1 个答案:

答案 0 :(得分:12)

遇到并解决的错误列表:

  1. shell-init:检索当前目录时出错:getcwd:无法访问父目录:Permission denied

  2. pg_config错误

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

  4. fe_sendauth:未提供密码

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

  6. pg_ctl:服务器未关闭

  7. (PG ::错误)

  8. 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之外的每个目录< / p>

    正确切换到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服务器。如果您需要启动服务器,例如你关闭了电脑,看到&#34;你可以从命令行停止或启动服务器&#34;在下面的第5步中。

    C)使用pgAdmin3连接服务器:
    我花了几个小时试图找出如何启动服务器,只是一般使用postgres没有运气。然后我偶然在dir /Library/PostgreSQL/9.2中看到了一个名为pgAdmin3的东西。我点击了它,打开了一个带有几个窗格的窗口。

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

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

    我点击了PostgreSQL 9.2(localhost:5432)&#39;突出显示它,然后我右键单击以显示一个菜单,然后我选择了Connect。出现提示时,我输入了数据库超级用户密码。

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

    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)
    

    突出显示它,然后单击图标&#34;刷新所选对象&#34;在窗口顶部,您将看到显示新用户。

    createuser的postgres文档在这里:

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

    还有一个dropuser命令:

    bash-3.2$ dropuser 7stud
    

    2)然后添加&#39;&#39; gem到您的Gemfile ,并注释掉sqlite gems。

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

    rails_projects/sample_app/$ bundle install --without production
    

    当我尝试这个时,我得到了一个&#39; pg_config&#39;错误。为了解决这个错误,我遵循了这里的建议:

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

    并将/Library/PostgreSQL/9.2添加到我的PATH中(我在.bashrc中执行所有PATH操作。)。不要忘记来源&#39; .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文件。
    对于每个部分:测试,开发和生产改变了适配器&#39;和&#39;数据库&#39;行,并添加一个&#39;编码&#39;线,例如:

    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"
    

    (请记住&#39; source&#39; .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文件中,您需要更改&#39; md5&#39;信任&#39;:

    # 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
    

    访问METHOD&#39; md5&#39;表示数据库期望指定数据库用户的加密密码。但是,当您创建新用户时,您创建了它而没有密码。访问METHOD&#39;信任&#39;表示数据库不需要密码。

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

    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用户,请参阅&#34;安装和使用PostgreSQL&#34;上面。)

    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
    

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

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

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

    6)Guard / 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)将下一行从<true/>更改为<false/>

    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