61 lines
1.7 KiB
SQL
61 lines
1.7 KiB
SQL
-- 创建新表
|
|
DROP TABLE IF EXISTS firearm_new;
|
|
CREATE TABLE firearm_new
|
|
(
|
|
id BIGSERIAL NOT NULL,
|
|
name VARCHAR(64) NOT NULL,
|
|
type INTEGER NOT NULL,
|
|
level VARCHAR(10) NOT NULL,
|
|
calibre VARCHAR(20) NOT NULL,
|
|
fire_rate INTEGER NOT NULL,
|
|
armour_damage INTEGER NOT NULL,
|
|
body_damage INTEGER NOT NULL,
|
|
review TEXT NULL,
|
|
CONSTRAINT firearm_new_pkey PRIMARY KEY (id)
|
|
);
|
|
|
|
-- 迁移数据
|
|
INSERT INTO firearm_new(id, name, type, level, calibre, fire_rate, armour_damage, body_damage,
|
|
review)
|
|
SELECT id,
|
|
name,
|
|
type,
|
|
level,
|
|
'',
|
|
0,
|
|
0,
|
|
0,
|
|
review
|
|
FROM firearm;
|
|
|
|
-- 处理外键(关键步骤)
|
|
-- 先删除指向旧表的外键约束
|
|
ALTER TABLE modification
|
|
DROP CONSTRAINT fk_modification_firearm;
|
|
|
|
-- 重命名旧表和索引
|
|
ALTER TABLE firearm
|
|
RENAME TO firearm_legacy;
|
|
ALTER INDEX firearm_pkey RENAME TO firearm_legacy_pkey;
|
|
|
|
-- 重命名新表和索引
|
|
ALTER TABLE firearm_new
|
|
RENAME TO firearm;
|
|
ALTER INDEX firearm_new_pkey RENAME TO firearm_pkey;
|
|
|
|
-- 重新建立外键,指向新的 firearm 表
|
|
ALTER TABLE modification
|
|
ADD CONSTRAINT fk_modification_firearm
|
|
FOREIGN KEY (firearm_id) REFERENCES firearm (id);
|
|
|
|
-- 序列所有权与名称修正
|
|
ALTER SEQUENCE firearm_id_seq RENAME TO firearm_legacy_id_seq;
|
|
ALTER SEQUENCE firearm_new_id_seq RENAME TO firearm_id_seq;
|
|
ALTER SEQUENCE firearm_id_seq OWNED BY firearm.id;
|
|
|
|
-- 更新序列计数器
|
|
SELECT setval('firearm_id_seq', coalesce(max(id), 1))
|
|
FROM firearm;
|
|
|
|
-- 删除旧表
|
|
DROP TABLE IF EXISTS firearm_legacy CASCADE; |