PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como criar uma tabela apenas se ela não existir no PostgreSQL


No PostgreSQL, você pode usar o IF NOT EXISTS cláusula do CREATE TABLE para verificar se uma tabela com o mesmo nome já existe no banco de dados antes de criá-la.

A tabela só será criada se não existir outra tabela com o mesmo nome. Se já existir uma tabela com esse nome, será emitido um “aviso” em vez de um erro.

Exemplo


Segue um exemplo para demonstrar:
CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Aqui, t1 é o nome da tabela e tudo entre os parênteses é a definição da tabela (ou seja, colunas, etc).

Nesse caso, a tabela só será criada se ainda não houver uma chamada t1 .

Verifique se a tabela já existe


Podemos consultar o pg_tables view para verificar se a tabela agora existe:
SELECT EXISTS (
    SELECT FROM 
        pg_tables
    WHERE 
        schemaname = 'public' AND 
        tablename  = 't1'
    );

Resultado:
True

Neste caso, recebo True , o que significa que a tabela existe e que tenho acesso a ela.

Dependendo da sua configuração, você pode obter t /f em vez de True /False .

Tente criar a tabela novamente


Se tentarmos criar essa tabela novamente:
CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Não recebemos um erro, recebemos um aviso:
NOTICE:  relation "t1" already exists, skipping

Como esperado, o aviso nos informa que a tabela já existe.

Sem o IF NOT EXISTS Cláusula


Veja o que acontece quando não usamos o IF NOT EXISTS cláusula ao tentar criar uma tabela que já existe:
CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Desta vez recebemos um erro:
ERROR:  relation "t1" already exists

Observe que o IF NOT EXISTS cláusula não verifica a estrutura/definição da tabela. Ele simplesmente verifica se não há nenhuma tabela existente com o mesmo nome que estamos tentando dar à tabela que estamos criando.

Em outras palavras, só porque uma tabela com esse nome já existe, não significa que ela tenha a definição correta.

O IF NOT EXISTS funcionalidade foi adicionada no PostgreSQL 9.1 (notas de lançamento).