postgresql - 迁移未在终端中运行,但在数据库中运行
问题描述
正在开发的应用程序,使用 Postgres、docker 和 typeorm。终端射击错误,好像没有运行迁移,并说“关系'孤儿院'已经存在”。
但是我的数据库客户端工具 beekeper 显示所有迁移都创建得很好,并且 api 在所有路由中都正常接收数据。
有人知道发生了什么吗?
ormconfig.json
{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "postgres",
"password": "docker",
"database": "happy",
"synchronize": true,
"migrations": [
"./src/database/migrations/*.ts"
],
"entities": [
"./src/models/*.ts"
],
"cli": {
"migrationsDir": "./src/database/migrations"
}
}
迁移文件:
import {MigrationInterface, QueryRunner, Table} from "typeorm";
export class Orphanage1616788509901 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(new Table({
name: 'orphanages',
columns: [
{
name: 'id',
type: 'uuid',
unsigned: true,
isPrimary: true,
isGenerated: true,
},
{
name: 'name',
type: 'varchar'
},
{
name: 'latitude',
type: 'varchar'
},
{
name: 'longitude',
type: 'varchar'
},
{
name: 'about',
type: 'text'
},
{
name: 'instructions',
type: 'text'
},
{
name: 'opening_hours',
type: 'varchar'
},
{
name: 'open_on_weekends',
type: 'boolean',
default: 'false'
},
{
name: 'user_name',
type: 'varchar'
},
{
name: 'user_id',
type: 'uuid'
}
],
foreignKeys: [
{
name: 'OrphanageUser',
columnNames: ['user_id'],
referencedTableName: 'users',
referencedColumnNames: ['id'],
onUpdate: 'CASCADE',
onDelete: 'CASCADE',
}
]
}))
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropTable('orphanages');
}
}
实体文件
import { Entity, Column, PrimaryGeneratedColumn, OneToMany, JoinColumn, ManyToOne } from 'typeorm';
import Image from './Images';
import User from './User';
@Entity('orphanages')
export default class Orphanage {
@PrimaryGeneratedColumn('uuid')
id: number;
@Column()
name: string;
@Column()
latitude: string;
@Column()
longitude: string;
@Column()
about: string;
@Column()
instructions: string;
@Column()
opening_hours: string;
@Column()
open_on_weekends: boolean;
@Column()
user_id: number;
@Column()
user_name: string;
@OneToMany(() => Image, image => image.orphanage, {
cascade: ['insert' , 'update']
})
@JoinColumn({ name: 'orphanage_id'})
images: Image[];
@ManyToOne(() => User, user => user.orphanages)
@JoinColumn({ name: 'user_id'})
user: User;
}
用户迁移文件
import {MigrationInterface, QueryRunner, Table} from "typeorm";
export class User1616788592127 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(new Table({
name: 'users',
columns: [
{
name: 'id',
type: 'uuid',
unsigned: true,
isPrimary: true,
isGenerated: true,
// generationStrategy:'increment'
},
{
name: 'name',
type: 'varchar'
},
{
name: 'email',
type: 'varchar',
isUnique: true
},
{
name: 'password',
type: 'varchar',
},
{
name: 'role',
type: 'varchar',
},
{
name: "date",
type: "timestamp",
},
{
name: "isVerified",
type: "boolean",
default: false,
},
{
name: "tokenId",
type: "uuid",
// default: false,
},
],
foreignKeys: [
{
name: 'TokenUser',
columnNames: ['tokenId'],
referencedTableName: 'tokens',
referencedColumnNames: ['id'],
onUpdate: 'CASCADE',
onDelete: 'CASCADE',
}
]
}))
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropTable('users');
}
}
用户实体文件
import { Request, Response } from 'express';
import { Entity, Column, PrimaryGeneratedColumn, BeforeInsert, BeforeUpdate, OneToMany, OneToOne, JoinColumn, CreateDateColumn, UpdateDateColumn, createConnection } from 'typeorm'; // decorators from typeorm
// import { Length, IsNotEmpty } from 'class-validator';
import * as bcrypt from 'bcryptjs';
import Orphanage from './Orphanage';
import Token from './Token';
@Entity('users')
export default class User {
@PrimaryGeneratedColumn('uuid')
id: number;
@Column()
name: string;
@Column({
unique: true
})
email: string;
@Column()
password: string;
@Column()
role: string;
default: 'basic'
enum: ["basic", "supervisor", "admin"];
@Column({
type: "timestamp"
})
date!: Date;
@Column({
default: false
})
isVerified: boolean;
checkIfUnencryptedPasswordIsValid(unencryptedPassword: string) {
return bcrypt.compareSync(unencryptedPassword, this.password);
}
@OneToMany(() => Orphanage, orphanage => orphanage.user, {
cascade: ['insert' , 'update']
})
@JoinColumn({ name: 'user_id'})
orphanages: Orphanage[];
@OneToOne(() => Token, token => token.user, {
// cascade: ['insert' , 'update'] //
})
@JoinColumn({name: "tokenId"})
// token: Token[];
token: Token;
}
解决方案
推荐阅读
- java - 流操作中排序操作的执行
- apache-spark - 用于结构化流的 QueueStream 可能吗?
- java - Talend 日期:将 EST 时间解析为 UTC
- java - 数苹果和橙子
- coldfusion - ColdFusion FarCry CMS 安装问题
- java - 在java中以金字塔模式打印XO?
- android - 某些 unicode 字符无意中被转换为 Android TextView 中的标志表情符号
- c# - C# 字符串到所有样式或文化的十进制
- php - PHP 函数 stripcslashes 未按要求转换
- java - 整数的反转数字:如何找出数字是否溢出?