jua*_*cia 5 stored-procedures typescript typeorm nestjs
我正在尝试在 Postgress 数据库中创建一个存储函数。原因是我们可能有来自该数据库的多个消费者,并且我们当前使用 typeorm 的迁移从我们的实体生成我们的表。
查看 typeorm 的文档和库的源代码,我发现某些事件和“订阅者”也有一些“监听器”的实现。
这种方法的问题在于它与技术或 ORM 本身紧密相关......
是否可以生成一个原始查询作为具有类似定义的迁移:
import { MigrationInterface, QueryRunner } from "typeorm";
export class ProcedureCreation123123123 implements MigrationInterface {
name = 'ProcedureCreation123123123'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
CREATE OR REPLACE FUNCTION validate_update() RETURNS TRIGGER
BEGIN
...
END;
CREATE TRIGGER validate_update_value
BEFORE UPDATE
ON table
FOR EACH ROW
EXECUTE PROCEDURE validate_update();
`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP TRIGGER "validate_update_value"`);
}
}
Run Code Online (Sandbox Code Playgroud)
我完成了 typeorm 迁移文档的生成,以了解如何生成这样的迁移,但生成它的唯一方法是在与数据库相关的实体中存在差异。
向实体添加侦听器以尝试在迁移过程中生成触发器也不起作用。这一代人表示数据库架构没有变化。
另一种选择是调用 Nestjs 服务的模块 init 来定义一个原始查询,该查询将完全执行此操作,但每次启动服务时运行这样的代码听起来是错误的,并且可能添加或不添加此功能。 。
如果有任何关于如何结合 typeorm 的迁移对我的数据库进行这样的更改的建议,那就太好了。
解决方案很简单:
typeorm migration:create -n NameOfMigration
生成了我正在寻找的模板...尽管我期望实体的侦听器最终会生成触发器或允许我定义此查询。我意识到我正在寻求以一种更紧密耦合的方式使用实体,而不是定义与实体的当前定义分开的迁移。
最后,在这个由 typeorm 生成的文件中,我能够定义up并down根据我自己的需要来创建触发器和删除它们。
| 归档时间: |
|
| 查看次数: |
4177 次 |
| 最近记录: |