首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >psql告诉我在某些地方“数据库不存在”,而在另一些地方则承认它。

psql告诉我在某些地方“数据库不存在”,而在另一些地方则承认它。
EN

Stack Overflow用户
提问于 2013-09-10 15:22:41
回答 2查看 1.6K关注 0票数 0

我试图从本教程(http://jamiecook.wordpress.com/2011/11/24/setting-up-postgresql-postgis-for-rails-on-ubuntu/)中运行这些命令

代码语言:javascript
复制
sudo su - postgres
createdb -E UTF8 template_postgis # Create the template spatial database.
createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
psql -d osm -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
psql -d osm -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql
cat <<EOS | psql -d template_postgis
UPDATE sample_postgis_db SET datistemplate = TRUE WHERE datname = 'template_postgis';
REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.geometry_columns TO PUBLIC;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.spatial_ref_sys TO PUBLIC;
GRANT ALL ON geometry_columns TO PUBLIC;
GRANT ALL ON geography_columns TO PUBLIC;
GRANT ALL ON spatial_ref_sys TO PUBLIC;
VACUUM FULL FREEZE;
EOS

我发现了一个错误:

代码语言:javascript
复制
ERROR:  relation "sample_postgis_db" does not exist
LINE 1: UPDATE sample_postgis_db SET datistemplate=TRUE WHERE datnam...

但它确实存在:

代码语言:javascript
复制
psql -d postgres
\list
#=>
...
sample_postgis_db | postgres     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
...

我可以登录它:

代码语言:javascript
复制
psql -d sample_postgis_db

但是,即使我在db的psql内部运行更新行(当然是荒谬的,但我认为这是一个很好的测试),它仍然不识别本身的

代码语言:javascript
复制
sample_postgis_db=# UPDATE sample_postgis_db SET datistemplate=TRUE WHERE datname = "template_postgis";
ERROR:  relation "sample_postgis_db" does not exist
LINE 1: UPDATE sample_postgis_db SET datistemplate=TRUE WHERE datnam...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-10 15:46:01

本教程有:

代码语言:javascript
复制
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template_postgis';

你用这个代替了:

代码语言:javascript
复制
UPDATE sample_postgis_db SET datistemplate = TRUE WHERE datname = 'template_postgis';

这个替换是不必要的,因为这里更新的是系统表,而不是数据库名称。

票数 1
EN

Stack Overflow用户

发布于 2013-09-10 15:36:16

我讨厌这个is...and有多神秘可能是因为我把sample_postgis_db的角色改成了SUPERUSER (出于绝望),但它才刚刚开始工作.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18722888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档