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

Determinando o OID de uma tabela no Postgres 9.1?


Para obter um OID de tabela, converta para o tipo de identificador de objeto regclass (enquanto conectado ao mesmo banco de dados):
SELECT 'mytbl'::regclass::oid;

Isso encontra a primeira tabela (ou visualização, etc.) com o nome fornecido ao longo do search_path ou gera uma exceção se não for encontrada.

Qualifique o nome da tabela pelo esquema para remover a dependência no caminho de pesquisa:
SELECT 'myschema.mytbl'::regclass::oid;

No Postgres 9.4 ou mais tarde você também pode usar to_regclass('myschema.mytbl') , que não gera uma exceção se a tabela não for encontrada:
  • Como verificar se uma tabela existe em um determinado esquema

Então você só precisa consultar a tabela de catálogo pg_attribute para a existência da coluna:
SELECT TRUE AS col_exists
FROM   pg_attribute 
WHERE  attrelid = 'myschema.mytbl'::regclass
AND    attname  = 'mycol'
AND    NOT attisdropped  -- no dropped (dead) columns
-- AND attnum > 0        -- no system columns (you may or may not want this)