回答

收藏

如何在多个Postgresql共享数据库之间的表

技术问答 技术问答 331 人阅读 | 0 人回复 | 2023-09-14

我的Web应用程序具有多个部署-每个部署都是唯一的URL唯一的网站。' o5 v! c+ }+ A1 ~6 a- T$ f
每个部署都有不同的数据,UI等等,但是很相似Postgresql数据库结构(使用PostGIS)。所有数据库都位于同一个位置DB在服务器上。希望一个部署中的用户能够在不重新注册的情况下登录所有其他部署的应用程序。  X* J) l- m# V2 ~* \2 B
我想要的是在多个应用程序数据库之间共享的用户表。在应用程序中注册的任何用户都应该被所有其他应用程序识别。Postgres有可能吗?该模式是执行此操作的方法吗?* ?( R: Y; z5 D
                                                               
4 n- |. L/ @- r, d6 g6 O8 c3 i    解决方案:                                                               
& e9 q. J; c$ [5 i. `* C' T                                                                是的,解决方案是解决方案。使用单个。PostgreSQL集群和单个数据库。8 H5 }3 l. w) `6 r& q
为所有应用程序用户创建一个组:- `5 R) I- s6 l) F" z! m5 G
CREATE ROLE app;创建全局“应用程序”架构,所有全局共享应用程序表都将驻留在该架构中。
/ i3 L% Y0 C- r& q% r# ^! {CREATE SCHEMA AUTHORIZATION app;CREATE TABLE app.objects ( objectid int PRIMARY KEY );ALTER TABLE app.objects OWNER TO app;为每个部署创建单独的用户(无超级用户权限):
* F, v* [0 z/ ~4 M3 t; O) Z+ M. }CREATE USER app01 IN ROLE app;CREATE USER app02 IN ROLE app;(可选)替代IN ROLE app,这些用户可以在选定的应用对象上获得显式权限:
2 Z8 J$ |; i# Q# H0 t/ G. UGRANT USAGE ON SCHEMA app TO app01;GRANT SELECT on app.objects TO app01;依靠部署的手表将创建私有模式:
% [/ f$ Z6 s' ^+ \) pCREATE SCHEMA AUTHORIZATION app01; CREATE SCHEMA AUTHORIZATION app02;现在,您为每个已部署的应用程序都有一个私有模式。但您也有权共享访问全局数据。
0 M2 G7 l1 ^1 K4 @" K很好,应用程序没有架构意识。如果您连接到用户身份SELECT * FROM froobles,默认情况下将进行分析SELECT * FROMapp01.froobles为app01.您不必指定架构名称。
4 O7 {  z, E$ U" V0 {作为一项额外的措施,您可以使用表继承基于每个部署来扩大整体对象:
: M2 a& E3 J( J+ o9 m" I: DCREATE TABLE app01.objects (  localattr1 int, localattr2 text)INHERITS ( app.objects );;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则