17.2. 云开发环境

17.2.1. 开发应用系统的服务器

每一名或一组技术人员决定要在PostERP平台开发应用系统时,必须先透过兆笔官网租用一部Debian Linux服务器。有了该服务器之后,兆笔官网即为该服务器准备好开发环境:

假设兆笔官网显示该服务器的IP地址是192.168.1.200

首先,如果您当地机器没有~/.ssh/这个目录的话,则可以执行这个ssh-keygen -t rsa指令以生成一些文档。然后复制你当地机器的~/.ssh/id_rsa.pub这个文档到兆笔官网。复制完成后,兆笔官网立即把该文档的内容追加到您的开发服务器以及您全部云客户的服务器/home/dba/.ssh/authorized_keys这个文档的内容后面。

自此,您当地机器就可以无条件以dba这个Linux帐号登录该服务器以及您全部云客户的服务器

要在这部服务器从事应用系统的开发工作时,您可以采用下列任一方法以取得该服务器的PostgreSQL数据库最高权限:

17.2.2. 应用系统编号

当一位应用系统开发者登记要开发一套新应用系统时,兆笔官网就指定一个特定编号给该新应用系统,例如:15,称之为应用系统编号。本文件自此以5为例。

17.2.3. 服务器软件

除了PostgreSQL这个服务器软件以外,下列服务器软件也安装 在每一部服务器里,并且运行:

Note

PostERP的HTTP服务器软件预读一部分PostgreSQLtable以提高效率:t2t5t37t20t30t39t13t16t63等table。

若要重读t2这个table,必须重新启动PostERP HTTP服务器软件。

对这些table操作INSERTUPDATE、以及DELETE等SQL指令,会自动触发PostERP HTTP服务器软件去重读上述table。但是COPY指令无此效果。所以,开发者於执行COPY后,应执行PostgreSQLpg_notify()指令,通知PostERP HTTP服务器软件去重读上述table。开发者可以在psql输入\dt t37等指令,以显示table t37的附属trigger function或rule。然后,参考开发文件文档trigger.sql所述内容,以得知如何执行pg_notify()指令。

17.2.4. 云数据库分类

继续沿用应用系统编号5』。

云版数据库分成下列种类:

17.2.5. 预设登录帐号

请参见Section 16.2

新设数据库dev5app5自「骨架数据库」复制完成后,里面的预设登录帐号的初始密码为空白NULL。如果t43.f4NULL,则云版PostERP拒绝客户登录。为执行开发和测试工作,请手工设定这些帐号的登录密码,例如执行这道SQL指令:UPDATE t43 SET f4=crypt('我的密码',gen_salt('bf',7)) WHERE f1 IN ('admin','en','tw','cn');。请注意!务必呼叫crypt这个function以及bf这个algorithm。

Important

如果有任何数据库被删除然后重建,请执行下列SQL以提供crypt这个function:

CREATE EXTENSION pgcrypto;
				

17.2.6. 设计报表

设计报表Section 18.9的工作目前只能在桌面版的客户程序上面进行。

每一部运行PostERP的服务器里面都有几个报表服务器软件在运行。这些报表服务器软件以PostgreSQLreporting这个role接入目标数据库,并执行SQL指令以生成报表。如果有任何数据库或相关table被删除然后重建,请执行下列相关的SQL以赋予reporting这个role所需的权限:

GRANT USAGE ON SCHEMA public TO public;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO public;
GRANT INSERT,UPDATE ON TABLE t41 TO reporting;
GRANT INSERT,UPDATE ON TABLE t48 TO reporting;
GRANT INSERT,UPDATE ON TABLE t112 TO reporting;
GRANT INSERT,UPDATE ON TABLE t118 TO reporting;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO public;
			

例如t_220表格(table),如果被drop掉之后再重新create的话,reporting这个role就失去对t_220表格的全部存取权。所以,如果做了drop掉表格之后再重新create的话,务必记得再下这道指令以恢复reporting这个role对该表格的SELECT权限:

GRANT SELECT ON TABLE t_220 TO public;
			

同理,如果上述报表服务器必须INSERT和UPDATE的table被删除后再重新CREATE的话,请执行下面相关的指令:

GRANT INSERT,UPDATE ON TABLE t41 TO reporting;