C# 如何在PostgreSQL数据库中自动找到正确的模式来存储数据?

C# 如何在PostgreSQL数据库中自动找到正确的模式来存储数据?,c#,postgresql,stored-procedures,C#,Postgresql,Stored Procedures,我有一个C#WinForms应用程序,它导入固定宽度文件中包含的销售信息,并将其存储到一些表中。这些表具有完全相同的结构,但位于数据库中不同的模式中 目前,我在应用程序中运行了两个查询来存储每个销售的数据,一个用于获取正确的模式来存储数据,另一个用于实际将数据插入表中 为了更好地举例说明,假设我在一个主模式中有一个Clients表,在几个模式中(我的国家的每个地区一个),每个模式都有一个Sales表。我使用每个销售的客户Id来找到存储它的正确模式 我需要优化这个过程,让它更快。我分析了应用程序,

我有一个C#WinForms应用程序,它导入固定宽度文件中包含的销售信息,并将其存储到一些表中。这些表具有完全相同的结构,但位于数据库中不同的模式中

目前,我在应用程序中运行了两个查询来存储每个销售的数据,一个用于获取正确的模式来存储数据,另一个用于实际将数据插入表中

为了更好地举例说明,假设我在一个主模式中有一个Clients表,在几个模式中(我的国家的每个地区一个),每个模式都有一个Sales表。我使用每个销售的客户Id来找到存储它的正确模式

我需要优化这个过程,让它更快。我分析了应用程序,这两个查询是最耗时的步骤。我认为在我的应用程序中运行一个命令并将查找正确模式的工作留给数据库会有所帮助

我想实现这样的目标:

INSERT INTO 
    (SELECT clients.schema_name FROM main.clients WHERE client_id = @client_id).sales 
    (client_id, qty, value) 
VALUES 
    (@client_id, @qty, @value)
显然,它不起作用。我对SQL了解不多,只知道基本知识,但我认为这不可能在一个命令中实现,我想我需要一个存储过程来实现这一点


我希望听到一些关于这方面的指导或更好的解决方案(只要不涉及更改数据库结构)。

您的数据库已损坏,长期避免这个问题可能不值得。如果您感兴趣,那么不难指出使用这种模式的可维护性问题

也就是说,您可能会在C代码中缓存client_id->schema_name,并避免大多数查询以获取该信息


您也可以编写一个SP来实现这一点,但它可能不得不求助于构造动态SQL查询或类似的黑客攻击,这本身可能非常缓慢。

是的,我知道我的数据库有它的缺陷,这只是其中之一。问题是我现在无法修复它,因为已经有很多模块依赖于它。我在这个项目的后期开发阶段加入了这个项目,这个数据库已经被一个显然比我更糟糕的人定义了。我结束了你说的,在导入销售之前,我对每个唯一的客户id运行一个查询,并将其和对应的模式存储在字典中。成功地将导入每个文件的时间减少了50%左右。我将把你的回答记为已被接受。谢谢