Typeorm 如何定义存储过程、函数和触发器到 DB。如果可能的话进行迁移

How Typeorm define stored procedures, functions and triggers to DB. With migrations if possible

我正在尝试在 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"`);
    }

}

我查看了 typeorm 的迁移文档的生成,以了解如何生成这样的迁移,但生成它的唯一方法是在与数据库相关的实体中存在差异。

向实体添加侦听器以尝试生成触发器作为迁移的一部分也不起作用。并且这一代人表示数据库模式没有变化。

另一种选择是调用我的 nestjs 服务的模块初始化来定义一个原始查询来完成这些事情,但是每次我启动服务时 运行 这样的代码听起来是错误的并且可能会添加或不添加此功能...

如果有任何关于如何结合 typeorm 迁移对我的数据库进行此类更改的建议,那就太好了。

解决方案很简单:

typeorm migration:create -n NameOfMigration

生成了我正在寻找的模板...虽然我期望实体的侦听器最终会生成触发器或允许我定义此查询。我意识到我正在寻找以一种更紧密耦合的方式使用实体,而不是定义一个与我的实体的当前定义分开的迁移。

最后,在这个由 typeorm 生成的文件中,我能够根据自己的需要定义 updown 来创建和删除它们。