我已经使用FireDAC几年了,但不知怎么的,这个问题从来没有出现过。
我们使用的是Postgres数据库,定义了几个模式。每个用户都定义了Postgres Search_path,到目前为止我们主要使用schema1。
示例:
ALTER ROLE user1 SET search_path = schema1, schema2, schema3;现在,在Delphi中,所有查询和表都是在没有模式的情况下定义的(我们都认为search_path在做它的工作),虽然我们只使用schema1,但是一切都很好。
但是,每当我使用来自schema2或schema3的表时,只有打开操作才能按预期工作。尽管是一个不同的模式,但错误‘关系“"schema1.tableX”不存在,tableX Post失败。
关系不存在,我在这里错过了什么?谢谢大家提前..。
我使用Delphi东京和Postgres10.1,数据集连接到DevExpress网格。此外,此行为可在两个使用不同模式的独立应用程序上验证.嗯,这部分可能是可以理解的,因为它们都是由我开发和更新的。
重复此操作的可能步骤:
Postgres:
ALTER ROLE user1 SET search_path = schema1, schema2; -- Default schema is schema1
schema1.table1
schema1.table2
schema2.table3
schema2.table4
Delphi:
table3.Tablename := 'table3';
table3 is connected to a TcxGrid via a Datasource.
table3.Open;
Then use either GUI or code to edit/insert a record.Post操作应该失败,错误的关系"schema1.table3“不存在。
DDL:
CREATE DATABASE "AsystSQLProd"
WITH OWNER = "AsystSQL"
ENCODING = 'UTF8'
TABLESPACE = ts_asyst_data
LC_COLLATE = 'C'
LC_CTYPE = 'C'
CONNECTION LIMIT = -1;
GRANT ALL ON DATABASE "AsystSQLProd" TO "AsystSQL";
GRANT CONNECT, TEMPORARY ON DATABASE "AsystSQLProd" TO "AsystSupportRole";
GRANT CONNECT, TEMPORARY ON DATABASE "AsystSQLProd" TO "AsystLicensingRole";
GRANT CONNECT, TEMPORARY ON DATABASE "AsystSQLProd" TO "AsystFitRole";
GRANT CONNECT, TEMPORARY ON DATABASE "AsystSQLProd" TO "AsystMatRole";
REVOKE ALL ON DATABASE "AsystSQLProd" FROM public;
CREATE SCHEMA fit AUTHORIZATION "AsystSQL";
GRANT ALL ON SCHEMA fit TO "AsystSQL";
GRANT ALL ON SCHEMA fit TO "AsystFitRole";
GRANT USAGE ON SCHEMA fit TO "AsystLicensingRole";
GRANT USAGE ON SCHEMA fit TO "AsystSupportRole";
CREATE SCHEMA mat AUTHORIZATION "AsystSQL";
GRANT ALL ON SCHEMA mat TO "AsystSQL";
GRANT ALL ON SCHEMA mat TO "AsystMatRole";
CREATE USER andrejg WITH
LOGIN
NOSUPERUSER
INHERIT
NOCREATEDB
NOCREATEROLE
NOREPLICATION
VALID UNTIL 'infinity'
GRANT
"AsystFitRole",
"AsystMatRole",
"AsystSupportRole" TO andrejg;
ALTER USER andrejg SET search_path TO mat, sup, fit;发布于 2021-02-21 17:02:22
将public放在其他计划之前:
ALTER DATABASE DBName SET search_path TO public, schema1, schema2https://stackoverflow.com/questions/51649400
复制相似问题