Tenho um aplicativo que utiliza o Advantage Database Server e quero migrá-lo para o PostgreSQL. Para remover uma tabela do dicionário do banco de dados, uso a seguinte consulta SQL:
DROP TABLE table_name FROM DATABASE NO_DELETE;
A palavra-chave NO_DELETE instrui o servidor a não excluir os arquivos de tabela do disco. Depois disso, posso adicionar novamente a tabela excluída ao dicionário do banco de dados usando o seguinte procedimento:
sp_AddTableToDatabase(
TableName,CHARACTER,200,
TablePath,CHARACTER,515,
TableType,SHORTINT,
CharType,SHORTINT,
IndexFiles,MEMO,
Comment,MEMO )
Por exemplo:
EXECUTE PROCEDURE sp_AddTableToDatabase('table_name', 'table_name.adt', 3, 1, '', '');
Existe essa possibilidade no PostgreSQL?
Mova-o para outro esquema
Se você precisar "escondê-lo" temporariamente, você pode simplesmente movê-lo para um esquema/namespace diferente e não padrão:
demo em db<>fiddle
Por padrão, as coisas são criadas e pesquisadas no esquema
public
ou em qualquer esquema que o Postgres veja primeiro,search_path
o que significa que, quando você move o objeto para outro lugar, ele não fica mais acessível a ninguém, a menos que ele seja explicitamente referenciado por um nome totalmente qualificado pelo esquema.Isso deve ser o suficiente para escondê-lo, mas para torná-lo realmente inacessível até mesmo para aqueles que descobrirem sua nova localização, você também pode
revoke
acessá-lo.Para trazer a tabela de volta, você pode movê-la de volta para
public
:E se você também
revoke
tiver acesso, você podegrant
recuperá-lo.Se você quisesse que todas as restrições referenciais fossem quebradas no processo, possivelmente para cascatear a queda para outros objetos antes de trazer este de volta, isso não fará isso. Alterar o namespace não afeta a integridade referencial, então todas as chaves estrangeiras ainda apontam para esta tabela.
Alterar o esquema é uma operação somente de metadados e não causará nenhum tipo de exclusão ou reescrita real das páginas da tabela no disco.
Vale ressaltar que alguns outros RDBMS se referem a bancos de dados como schemas e namespaces ou vice-versa. No PostgreSQL, você pode ter vários schemas dentro de um único banco de dados e diferentes objetos podem ter o mesmo identificador/nome, desde que estejam em um schema diferente.
Desconecte-o
Se você fizer uma
partitioned
tabela, você podealter table..detach
a(s) partição(ões), entãodrop
a tabela. Todas as restrições referenciais serão quebradas e o drop poderá ser cascateado enquanto seus dados reais na partição desanexada permanecerão intocados.Depois, você pode redefinir a tabela e reconectar a(s) partição(ões). Tudo isso também é somente metadados e (exceto pela parte em cascata) não exclui fisicamente nenhuma linha das páginas da tabela no disco.
Solte como um objeto estranho
Conforme mencionado por @Adel Alaa , você pode configurar a tabela como um
foreign table
. Se você configurá-la em um banco de dados Postgres, você pode usarpostgres_fdw
para vinculá-la.Nesse caso, removê-lo significa apenas remover o link para os dados, em vez de realmente remover os dados de onde eles realmente residem.
Eles
drop
não removeram os dados da fonte:Há
file_fdw
coisas como CSV, extensões que permitem vincular objetos de outros RDBMS e muitos outros .O PostgreSQL não permite "re-linkar" um arquivo externo como uma tabela diretamente, você deve Exportar e então recriar a tabela. Pesquise sobre e tente Foreign Data Wrappers (FDW) Espero que ajude