在Amazon RDS上设置PostGis

Cro*_*sey 26 postgresql postgis amazon-web-services amazon-rds

好吧,所以我对RDS和AWS来说相当新,但我不能为我的生活,把我在笔记本电脑上创建的数据库,到亚马逊RDS,我确实把它移到我的测试VPS和我的台式机,没有任何问题,这是我到目前为止所尝试的..

create extension postgis;
create extension fuzzystrmatch;
create extension postgis_tiger_geocoder;
create extension postgis_topology;
alter schema tiger owner to rds_superuser;
alter schema topology owner to rds_superuser;

CREATE FUNCTION exec(text) returns text language plpgsql volatile AS $f$ BEGIN EXECUTE $1; RETURN     $1; END; $f$;
SELECT exec('ALTER TABLE ' || quote_ident(s.nspname) || '.' || quote_ident(s.relname) || ' OWNER TO rds_superuser')
  FROM (
    SELECT nspname, relname
    FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid) 
    WHERE nspname in ('tiger','topology') AND
    relkind IN ('r','S','v') ORDER BY relkind = 'S')
s;        

GRANT ALL PRIVILEGES ON DATABASE testgetwork TO luke;
Run Code Online (Sandbox Code Playgroud)

然后我连接到数据库并尝试加载新数据库的本地副本...

luke@l-xps:~$ psql --host=myhost.dns.us-west-2.rds.amazonaws.com --port=5432 --username=luke --password --dbname=testgetwork < testgetwork.sql 
Password for user luke: 
SET
SET
SET
SET
SET
ERROR:  schema "topology" already exists
ALTER SCHEMA
CREATE EXTENSION
ERROR:  must be owner of extension plpgsql
CREATE EXTENSION
ERROR:  must be owner of extension postgis
CREATE EXTENSION
ERROR:  must be owner of extension postgis_topology

<more output, removed to save space>

ERROR:  permission denied for relation spatial_ref_sys
invalid command \.
 setval 
-------- 
      1
(1 row)

 setval 

<more output, removed to save space>
Run Code Online (Sandbox Code Playgroud)

我的问题是,我怎么能从这里继续前进?所有这些功能似乎都被权限问题所阻止,用户luke是rds_superuser组的一部分,对PostGis和RDS有经验的人是否知道如何纠正这个问题?

testgetwork=> \du
                                  List of roles
   Role name   |                   Attributes                   |    Member of    
---------------+------------------------------------------------+-----------------
 luke          | Create role, Create DB                         | {rds_superuser}
 rds_superuser | Cannot login                                   | {}
 rdsadmin      | Superuser, Create role, Create DB, Replication | {}
Run Code Online (Sandbox Code Playgroud)

asb*_*nge 17

在RDS上设置PostGIS的官方指南就在这里.

这对我有用.

我仍有问题导入我的数据,得到:

...
must be superuser to create a base type
permission denied for language c
....
Run Code Online (Sandbox Code Playgroud)

关于那些的任何想法?
此外,是否可以以rdsadmin身份登录?


Rah*_*rma 1

luke我认为这里的问题在于数据库上用户的权限testgetwork。请检查luke的权限。这个命令:

将数据库 testgetwork 的所有权限授予 luke;

应提前执行。luke然后在执行命令之前应重新与用户连接会话create extension。根据文档,正确的步骤是:

  • 当您创建 AWS RDS 实例时,RDS 会创建一个名为 name 的用户postgres(如果您未对其进行修改)。密码是您在创建时输入的密码。用户postgres(或以其他方式命名)不应用于一般 DBA 或应用程序任务,因为它已添加了权限,并且您不想弄乱数据库(通过将来执行危险的命令)。使用此用户连接到您的数据库。

psql --host=<rds_host> --port=5432 --username=postgres --password

  • 相反,应该创建一个单独的用户,仅授予其所需的权限。我认为这就是OP所做的。OP 创建了一个名为 的用户luke

创建角色卢克登录密码“pass”;

  • AWS RDS posgtres 实例附带已创建的角色名称rds_superuser,且超级用户访问权限受到限制。luke应该被授予rds_superuser特权。

将 rds_superuser 授予 gis_admin;

  • 创建数据库。由于数据库testgetwork 已经创建,我们将跳过此步骤。

  • 授予数据库luke的所有权限testgetwork

将数据库 testgetwork 的所有权限授予 luke;

  • 退出会话并使用 user 重新连接您的 AWS RDS PostgreSQL 实例luke

psql --host=<rds_host> --port=5432 --username=luke --password

现在运行所有扩展命令:

create extension postgis;
create extension fuzzystrmatch;
create extension postgis_tiger_geocoder;
create extension postgis_topology;
alter schema tiger owner to rds_superuser;
alter schema topology owner to rds_superuser;

CREATE FUNCTION exec(text) returns text language plpgsql volatile AS $f$ BEGIN EXECUTE $1; RETURN     $1; END; $f$;
SELECT exec('ALTER TABLE ' || quote_ident(s.nspname) || '.' || quote_ident(s.relname) || ' OWNER TO rds_superuser')
  FROM (
    SELECT nspname, relname
    FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid) 
    WHERE nspname in ('tiger','topology') AND
    relkind IN ('r','S','v') ORDER BY relkind = 'S')
s;
Run Code Online (Sandbox Code Playgroud)