我正在开发一个使用金字塔网络应用程序编写的web应用程序。使用MySQL存储关系内容。但是web应用程序也是一种数据存储工具,我们为此使用Postgres。
请注意,每个用户的帐户都在Postgres中获取自己的连接参数。运行Postgres的主机对用户来说不一样。
我们有两个存储过程,这些存储过程对于应用程序的功能是必不可少的。我想知道如何将这些过程传送到每个Postgres数据库实例。我想确保更新它们也是相当容易的。
到目前为止,我能想到的就是这样。
我在应用程序的代码库中有一个名为procedures.sql的文件
CREATE FUNCTION {procedure_name_1} (text, text,
max_split integer) RETURNS text AS $$
BEGIN
-- do stuff --
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION {procedure_name_2} (text, text,
max_split integer) RETURNS text AS $$
BEGIN
-- do stuff --
END;
$$ LANGUAGE plpgsql;每当用户想要与他的DB对话时,我都会从python应用程序执行_add_procedures_to_db函数。
procedure_name_map = {
'procedure_name_1': 'function_1_v1',
'procedure_name_2': 'function_2_v1'
}
def _add_procedures_to_db(connection):
cursor = connection.Cursor()
with open(PROCEDURE_FILE_PATH) as f:
sql = f.read().format(**procedure_name_map)
try:
cursor.execute(sql)
connection.commit()
except:
pass请注意,当我们想要在MySQL DB的web响应周期内执行某些事务时,将获得连接参数。
策略是将function_1_v1更改为function_1_v2,以防我更新该过程的代码。
但是这似乎是一种非常昂贵的方法,因为每次我想连接时,我都会得到一个异常,必须在第一次之后处理。
,下面是我的问题:
在web应用程序代码中有其他方法可以做到这一点吗?还是应该让过程更新成为部署和配置的一部分,而不是应用程序层?
发布于 2015-06-12 18:51:28
如果您正在研究如何在不同的金字塔web应用程序版本部署(通常称为迁移)之间更改数据库(表、视图、存储过程)。
ALTER TABLE SQL命令等。https://stackoverflow.com/questions/30784371
复制相似问题