Eu tenho tabelas criadas como tal:
BEGIN;
CREATE TABLE tag (
id SERIAL,
name VARCHAR(255) UNIQUE NOT NULL,
description VARCHAR(511) NOT NULL DEFAULT '',
PRIMARY KEY(id)
);
CREATE TABLE fandom (
id SERIAL,
name VARCHAR(255) UNIQUE NOT NULL,
link TEXT UNIQUE NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE character (
fandom_id INT REFERENCES fandom(id), -- allowed to be null
link TEXT UNIQUE,
PRIMARY KEY(id)
) INHERITS (tag);
COMMIT;
Em seguida eu faço algo como
INSERT INTO tag (name) VALUES ('John Doe')
Na hora da inserção não sei se 'John Doe' é um personagem, mas posso verificar depois. Eu gostaria de fazer algo como
BEGIN;
DELETE FROM tag WHERE name='John Doe';
INSERT INTO character (name) VALUES ('John Doe');
COMMIT;
O problema, a meu ver, é que o ID é incrementado para o segundo 'John Doe' e agora todas as chaves estrangeiras que fazem referência à tag 'John Doe' por ID estão desativadas em um, se a exclusão funcionar.
Existe uma maneira de simplesmente mover a linha de 'John Doe' de 'tag' para 'personagem'?
Sou um novato em banco de dados, então notas adicionais são bem-vindas nos comentários.