我想用mikro-orm插入,但它找不到我的表:c(TableNotFoundException)



So

控制台:

yarn dev
yarn run v1.22.10
$ nodemon dist/index.js
[nodemon] 2.0.7
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json  
[nodemon] starting `node dist/index.js`     
[discovery] ORM entity discovery started, using ReflectMetadataProvider
[discovery] - processing entity Post
[discovery] - entity discovery finished, found 1 entities, took 21 ms
[info] MikroORM successfully connected to database postgres on postgresql://postgres:*****@127.0.0.1:5432
[query] begin
[query] insert into "post" ("created_at", "title", "updated_at") values ('2021-04-05T21:04:23.126Z', 'my first post', '2021-04-05T21:04:23.126Z') returning "_id" [took 12 ms]
[query] rollback
TableNotFoundException: insert into "post" ("created_at", "title", "updated_at") values ('2021-04-05T21:04:23.126Z', 'my first post', '2021-04-05T21:04:23.126Z') returning "_id" - relation "post" does not exist
at PostgreSqlExceptionConverter.convertException (P:.Projekteklireddit-servernode_modules@mikro-ormpostgresqlPostgreSqlExceptionConverter.js:36:24)
at PostgreSqlDriver.convertException (P:.Projekteklireddit-servernode_modules@mikro-ormcoredriversDatabaseDriver.js:194:54)
at P:.Projekteklireddit-servernode_modules@mikro-ormcoredriversDatabaseDriver.js:198:24
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async PostgreSqlDriver.nativeInsert (P:.Projekteklireddit-servernode_modules@mikro-ormknexAbstractSqlDriver.js:150:21)
at async ChangeSetPersister.persistNewEntity (P:.Projekteklireddit-servernode_modules@mikro-ormcoreunit-of-workChangeSetPersister.js:55:21)
at async ChangeSetPersister.executeInserts (P:.Projekteklireddit-servernode_modules@mikro-ormcoreunit-of-workChangeSetPersister.js:24:13)
at async UnitOfWork.commitCreateChangeSets (P:.Projekteklireddit-servernode_modules@mikro-ormcoreunit-of-workUnitOfWork.js:496:9)
at async UnitOfWork.persistToDatabase (P:.Projekteklireddit-servernode_modules@mikro-ormcoreunit-of-workUnitOfWork.js:458:13)
at async PostgreSqlConnection.transactional (P:.Projekteklireddit-servernode_modules@mikro-ormknexAbstractSqlConnection.js:53:25)
at async UnitOfWork.commit (P:.Projekteklireddit-servernode_modules@mikro-ormcoreunit-of-workUnitOfWork.js:183:17)
at async SqlEntityManager.flush (P:.Projekteklireddit-servernode_modules@mikro-ormcoreEntityManager.js:486:9)
at async SqlEntityManager.persistAndFlush (P:.Projekteklireddit-servernode_modules@mikro-ormcoreEntityManager.js:438:9)
previous error: insert into "post" ("created_at", "title", "updated_at") values ('2021-04-05T21:04:23.126Z', 'my 
first post', '2021-04-05T21:04:23.126Z') returning "_id" - relation "post" does not exist
at Parser.parseErrorMessage (P:.Projekteklireddit-servernode_modulespg-protocoldistparser.js:278:15)   
at Parser.handlePacket (P:.Projekteklireddit-servernode_modulespg-protocoldistparser.js:126:29)        
at Parser.parse (P:.Projekteklireddit-servernode_modulespg-protocoldistparser.js:39:38)
at Socket.<anonymous> (P:.Projekteklireddit-servernode_modulespg-protocoldistindex.js:10:42)
at Socket.emit (events.js:315:20)
at Socket.EventEmitter.emit (domain.js:467:12)
at addChunk (internal/streams/readable.js:309:12)
at readableAddChunk (internal/streams/readable.js:284:9)
at Socket.Readable.push (internal/streams/readable.js:223:10)
at TCP.onStreamRead (internal/stream_base_commons.js:188:23) {
length: 166,
severity: 'ERROR',
code: '42P01',
detail: undefined,
hint: undefined,
position: '13',
internalPosition: undefined,
internalQuery: undefined,
where: undefined,
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'd:\pginstaller_13.auto\postgres.windows-x64\src\backend\parser\parse_relation.c',
line: '1376',
routine: 'parserOpenTable'
}

索引.ts:

import { MikroORM } from "@mikro-orm/core";
import { __prod__ } from "./constants";
import { Post } from "./entities/Post";
import mikroConfig from "./mikro-orm.config";
const main = async () => {
const orm = await MikroORM.init(mikroConfig);
await orm.getMigrator().up;
const post = orm.em.create(Post, { title: "my first post" });
await orm.em.persistAndFlush(post);
};
main().catch((err) => {
console.error(err);
});

Post.ts:

import { Entity, PrimaryKey, Property } from "@mikro-orm/core";
@Entity()
export class Post {
@PrimaryKey()
_id!: number;
@Property({ type: "date" })
createdAt = new Date();
@Property({ type: "date", onUpdate: () => new Date() })
updatedAt = new Date();
@Property({ type: "text" })
title!: string;
}

mikro orm.config.ts:

import { __prod__ } from "./constants";
import { Post } from "./entities/Post";
import { MikroORM } from "@mikro-orm/core";
import path from "path";
export default {
migrations: {
path: path.join(__dirname, "./migrations"),
pattern: /^[w-]+d+.[tj]s$/,
},
entities: [Post],
dbName: "postgres",
debug: !__prod__,
type: "postgresql",
password: "hellothere",
} as Parameters<typeof MikroORM.init>[0];

我用npx-mikro-orm迁移创建的迁移:创建:

import { Migration } from '@mikro-orm/migrations';
export class Migration20210405205411 extends Migration {
async up(): Promise<void> {
this.addSql('create table "post" ("_id" serial primary key, "created_at" timestamptz(0) not null, "updated_at" timestamptz(0) not null, "title" text not null);');
}
}

在那之后,我将它编译到js-btw,但我想问题会出现在我的代码或idk plz的某个地方。请帮助我,我可以给你更多信息,只是plz帮助,我已经尝试修复这个错误5个小时了:/

顺便说一句,如果重要的话,我会参加Ben Awad的14小时全栈教程。

TableNotFoundException发生在您尝试在初始化表的架构(或结构(之前添加数据时。

像Mosh的Answer中那样传递--initial对我来说不起作用,可能是因为我在./mikro-orm.config.ts中传递用户名和密码。

我使用MikroORM的SchemaGenerator来初始化表,如官方文档中所示。


index.ts:中的主函数中添加要发布的数据之前,添加以下行

const generator = orm.getSchemaGenerator();
await generator.updateSchema();

index.ts中的主要功能现在应该是这样的:

const main = async () => {
const orm = await MikroORM.init(mikroConfig);    
await orm.getMigrator().up;
const generator = orm.getSchemaGenerator();
await generator.updateSchema();
const post = orm.em.create(Post, { title: "my first post" });
await orm.em.persistAndFlush(post);
};

updateSchema基于.entities/Post.ts创建一个表或更新它。当Post文件更新时,这可能会导致问题,我在学习Ben的教程时没有遇到任何问题。尽管如此,我仍然建议创建./create-schema.ts,并在需要时运行它,如官方文档中所示。

我也遇到过同样的问题。这就是我所做的:

  1. 我删除了migrations文件夹和dist文件夹
  2. 我运行了npx mikro-orm migration:create --initial

之后,我重新启动了yarn watchyarn dev,它对我有效。

请注意--initial标志。我建议查看官方文件。迁移表用于跟踪已执行的迁移。当您只运行npx mikro-orm migration:create时,将不会创建表,因此MikroORM无法检查Post实体的迁移是否已经执行(包括在数据库上创建相应的表(。

Ben在他的教程中没有使用--initial标志,他可能在教程之前就已经运行过了。

我自己也遇到过类似的问题(也在做Ben Awad的教程(。

我使用MikroORM的模式生成器来初始化表,就像Fares47的Answer中一样,但问题仍然存在。

直到我将我的用户设置为具有超级用户权限,它才开始工作。

我使用postgresql作为我的数据库,我使用自制软件下载了它。如果你有类似的设置,这里是我做的:

使用psql postgres在您的终端中启动psql。如果需要,可以通过在shell中键入du来查看用户并检查他们的权限。然后,要更改用户的权限,请使用命令ALTER ROLE <username> WITH SUPERUSER;。请确保包含分号,否则它将不会运行该命令。

查看这篇文章,了解有关psql命令的更多信息。

我通过在项目上安装ts节点解决了同样的问题

npm i-D ts节点

并将package.json上的useTsNode设置为true。

问题是,如果属性useTsNode为true并且安装了ts节点,则mikro orm cli仅在configPaths中添加ts文件路径。

我遇到的另一个问题是,mikro-orm.config.ts中的regex-in-pattern属性由于拼写错误而出错。

如果建议的任何步骤都不能解决问题,只需。。。

退出纱线手表和纱线开发从命令行运行此命令

npx mikro-orm migration:up

现在重新启动watch和dev,你应该会很好。

来自https://mikro-orm.io/docs/migrations/#migration-类

我也经历过这种情况。就像Fares47说的那样,这可能是因为我在./mikro-orm.config.ts中传递了用户名和密码。

我的解决方案是简单地在postgresql终端执行./src/migrations/Migration<NUMBERS>.ts文件中生成的sql命令。这是我在数据库中执行的命令,

create table "post" ("id" serial primary key, "created_at" timestamptz(0) not null, "updated_at" timestamptz(0) not null, "title" text not null);

就像他们在文档中建议的那样,

一种安全的方法是在开发服务器上生成SQL将其保存到在上手动执行的SQL迁移文件中生产服务器。

相关内容

  • 没有找到相关文章

最新更新