Como verificar eficientemente uma sequência para valores usados e não utilizados no PostgreSQL

No PostgreSQL (9.3), tenho uma tabela definida como:

CREATE TABLE charts
( recid serial NOT NULL,
  groupid text NOT NULL,
  chart_number integer NOT NULL,
  "timestamp" timestamp without time zone NOT NULL DEFAULT now(),
  modified timestamp without time zone NOT NULL DEFAULT now(),
  donotsee boolean,
  CONSTRAINT pk_charts PRIMARY KEY (recid),
  CONSTRAINT chart_groupid UNIQUE (groupid),
  CONSTRAINT charts_ichart_key UNIQUE (chart_number)
);

CREATE TRIGGER update_modified
  BEFORE UPDATE ON charts
  FOR EACH ROW EXECUTE PROCEDURE update_modified();

Gostaria de substituir o chart_number por uma sequência como:

CREATE SEQUENCE charts_chartnumber_seq START 16047;

Para que, por gatilho ou função, adicionar um novo registro de gráfico gere automaticamente um novo número de gráfico em ordem crescente. No entanto, nenhum registro de gráfico existente pode ter seu número de gráfico alterado e, ao longo dos anos, houve pulos nos números de gráfico atribuídos. Portanto, antes de atribuir um novo número de gráfico a um novo registro de gráfico, preciso ter certeza de que o "novo" número do gráfico ainda não foi usado e que nenhum registro de gráfico com um número de gráfico seja atribuído a um número diferente.

Como isso pode ser feito?

questionAnswers(4)

yourAnswerToTheQuestion