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).