18.2. 云开发环境

18.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数据库最高权限:

18.2.2. 应用系统编号

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

18.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()指令。

18.2.4. 云数据库分类

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

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

18.2.5. 预设登录帐号

请参见Section 17.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;
				

18.2.6. 设计报表

设计报表Section 19.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;