首页 > 解决方案 > 关系不存在(golang/mac OS)

问题描述

我已经广泛搜索了几个小时,我觉得我已经尝试了一切,但我仍然从 Go 中的代码以及转储的输出中得到“关系不存在” PSQL 数据库。

以默认 postgres 用户身份登录时:

from \du,所有用户都在那里,它说它拥有正确的数据库 from \dn,所有模式都在那里

虽然当我改变用户时,例如

\c myapp_db myapp_admin

跑步\du\dn等等。我什么也没得到

show search_path

也显示为“myapp”,这是正确的。一切似乎都是正确的,但关系不存在,是什么给出的?

这是我这样加载的 .sql 文件:

psql
\i thefile.sql
... runs and everything works granted, created, altered, etc.
\c myapp_db myapp_admin

然后我跑

\dt

没有布宜诺!没有关系!

有问题的 SQL 文件:

CREATE USER myapp_admin WITH ENCRYPTED PASSWORD 'admin';
CREATE USER myapp_manager WITH ENCRYPTED PASSWORD 'manager';
CREATE USER myapp_user WITH ENCRYPTED PASSWORD 'user';

GRANT myapp_user TO myapp_manager;
GRANT myapp_manager TO myapp_admin;

CREATE DATABASE myapp_db;
REVOKE ALL ON DATABASE myapp_db FROM PUBLIC;

GRANT CONNECT ON DATABASE myapp_db to myapp_user;

CREATE SCHEMA myapp AUTHORIZATION myapp_admin;

SET search_path = myapp;

ALTER ROLE myapp_admin IN DATABASE myapp_db SET search_path = myapp;
ALTER ROLE myapp_manager IN DATABASE myapp_db SET search_path = myapp;
ALTER ROLE myapp_user IN DATABASE myapp_db SET search_path = myapp;

GRANT USAGE ON SCHEMA myapp to myapp_user;
GRANT CREATE ON SCHEMA myapp to myapp_admin;

CREATE TABLE myapp.account (
    id bigserial primary key not null,
);

ALTER DEFAULT PRIVILEGES FOR ROLE myapp_admin
GRANT SELECT ON TABLES TO myapp_user;  -- only read

ALTER DEFAULT PRIVILEGES FOR ROLE myapp_admin
GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLES TO myapp_manager;  -- + write, truncate

ALTER DEFAULT PRIVILEGES FOR ROLE myapp_admin
GRANT USAGE, SELECT, UPDATE ON SEQUENCES TO myapp_manager;

有什么想法吗?我开始认为我的 PostgreSQL 安装有一些错误。

标签: databasepostgresqlgopsql

解决方案


推荐阅读