postgresql 如何为应用程序没有迁移脚本的数据库创建模拟视图?

rlcwz9us  于 2022-11-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(101)

我的应用程序具有以下架构:

如您所见,App1能够迁移Db1,而App2能够迁移Db2。App1仅访问Db2的视图my_view1my_view2
在App1进行单元测试时,我如何使用模拟数据创建“假”视图,这些数据表示实际视图my_view1my_view2

mwkjh3gx

mwkjh3gx1#

为了生成测试视图,您需要生成一个初始SQL脚本,该脚本将生成一个类似于视图的表,而视图将只是我们生成的表中的一个select *:

psql -U your_user your_database -c "CREATE TABLE my_view1_mock as select * FROM my_view_1";
pg_dump -U your_user your_database -t my_view1_mock --schema-only > mock_views.sql
echo "CREATE OR REPLACE view my_view_1 as SELECT * FROM my_view1_mock" >> mock_views.sql

psql -U your_user your_database -c "CREATE TABLE my_view2_mock as select * FROM my_view_2";
pg_dump -U your_user your_database -t my_view2_mock --schema-only >> mock_views.sql
echo "CREATE OR REPLACE view my_view_2 as SELECT * FROM my_view2_mock" >> mock_views.sql

换句话说,我们制作了一个脚本mock_views.sql,它将创建伪视图。在工具的执行运行时运行实际测试之前,将从单元测试(如phpunit)工具中执行mock_views.sql。因此,还需要为Db 1和Db2初始化空测试数据库。
测试数据需要填入表格my_view2_mockmy_view1_mock,才能显示在实际的视观表中。请记住,此方法会隐藏填入视观表的实际表格中的任何逻辑/数据填入。
在使用phpunit的情况下,建议在setUp方法中执行sql脚本。

相关问题