微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – Postgres看不到我的PGDATA环境变量

谁能解释一下:

~$echo $PGDATA
/Library/Postgresql/9.2/data

~$cd /Library/Postgresql/9.2/

/Library/Postgresql/9.2$sudo su postgres

bash-3.2$echo $PGDATA
<blank line>   

bash-3.2$pg_ctl start
pg_ctl: no database directory specified and environment variable PGDATA unset
Try "pg_ctl --help" for more @R_168_4045@ion.

bash-3.2$export PGDATA="/Library/Postgresql/9.2/data"

bash-3.2$pg_ctl start
server starting

bash-3.2$

以下是我的〜/ .bashrc文件

export PGDATA="/Library/Postgresql/9.2/data"

我不是在拼错PGDATA中的路径:

~$echo $PGDATA
                /Library/Postgresql/9.2/data
 export PGDATA="/Library/Postgresql/9.2/data"

解决方法

sudo can’t be assumed to keep the environment variables of its caller.
See its manpage for the details with your specific OS.

据我所知,环境变量附加到shell,据我所知,我在同一个shell中.

这对我有用:

~$cd /Library/Postgresql/9.2/
/Library/Postgresql/9.2$sudo -E su postgres

-E          The -E (preserve environment) option will override the
               env_reset option in sudoers(5)).  It is only available when
               either the matching command has the SETENV tag or the
               setenv option is set in sudoers(5).

我只了解以下内容

The -E (preserve environment) option

下一条评论

When I su to postgres I do su – postgres. Notice the hyphen.

这是我的手册中关于连字符的说法:

-l      Simulate a full login.  The environment is discarded except for
         HOME,SHELL,PATH,TERM,and USER.  HOME and SHELL are modified
         as above.  USER is set to the target login.  PATH is set to
         ``/bin:/usr/bin''.  TERM is imported from your current environ-
         ment.  The invoked shell is the target login's,and su will
         change directory to the target login's home directory.

 -       (no letter) The same as -l.

我没有看到它将如何保留PGDATA环境变量,这就是我尝试连字符时发生的事情:

/Library/Postgresql/9.2$sudo su - postgres
Password:
7studs-computer:~ postgres$ls
bin             pgAdmin3.app
data                pg_env.sh
doc             scripts
include             share
installer           stackbuilder.app
lib             uninstall-postgresql.app
7studs-computer:~ postgres$pg_ctl start
-bash: pg_ctl: command not found
7studs-computer:~ postgres$ls 
bin             pgAdmin3.app
data                pg_env.sh
doc             scripts
include             share
installer           stackbuilder.app
lib             uninstall-postgresql.app
7studs-computer:~ postgres$cd bin
7studs-computer:bin postgres$ls
clusterdb       pg_config       pgbench
createdb        pg_controldata      pltcl_delmod
createlang      pg_ctl          pltcl_listmod
createuser      pg_dump         pltcl_loadmod
dropdb          pg_dumpall      postgres
droplang        pg_receivexlog      postmaster
dropuser        pg_resetxlog        psql
ecpg            pg_restore      reindexdb
initdb          pg_standby      vacuumdb
oid2name        pg_test_fsync       vacuumlo
pg_archivecleanup   pg_test_timing
pg_basebackup       pg_upgrade
7studs-computer:bin postgres$./pg_ctl start
pg_ctl: no database directory specified and environment variable PGDATA unset
Try "pg_ctl --help" for more @R_168_4045@ion.
7studs-computer:bin postgres$

因此连字符对我不起作用(OSX 10.6.8).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐