Безопасно и чисто переименовывать таблицы, использующие последовательные первичные ключи столбцов в Postgres?

Я знаю, что таблицы PostgreSQL, использующие первичный ключ SERIAL, в конечном итоге создают неявный индекс, последовательность и ограничение, создаваемые PostgreSQL. Вопрос в том, как переименовать эти неявные объекты при переименовании таблицы. Ниже моя попытка выяснить это с конкретными вопросами в конце.

Учитывая таблицу, такую как

CREATE TABLE foo (
    pkey SERIAL PRIMARY KEY,
    value INTEGER
);

Выводы Postgres

NOTICE:  CREATE TABLE will create implicit sequence "foo_pkey_seq" for serial column "foo.pkey"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "foo_pkey" for table "foo"
Query returned successfully with no result in 52 ms.

PgAdmin III показывает следующее как DDL для таблицы

CREATE TABLE foo
(
  pkey serial NOT NULL,
  value integer,
  CONSTRAINT foo_pkey PRIMARY KEY (pkey )
)
WITH (
  OIDS=FALSE
);
ALTER TABLE foo
  OWNER TO postgres;

Теперь переименуйте таблицу

ALTER table foo RENAME TO bar;

Выход Postgres

Query returned successfully with no result in 17 ms.

PgAdmin III SQL панель для таблицы

CREATE TABLE bar
(
  pkey integer NOT NULL DEFAULT nextval('foo_pkey_seq'::regclass),
  value integer,
  CONSTRAINT foo_pkey PRIMARY KEY (pkey )
)
WITH (
  OIDS=FALSE
);
ALTER TABLE bar
  OWNER TO postgres;

Обратите внимание на дополнительныеDEFAULT nextval('foo_pkey_seq'::regclass), это означает, что переименование таблицы не переименовывает последовательность для первичных ключей, но теперь у нас есть это явноеnextval().

Теперь переименуйте последовательность

Я хочу, чтобы имена баз данных соответствовали друг другу, поэтому я попытался

ALTER SEQUENCE foo_pkey_seq RENAME TO bar_pkey_seq;
Query returned successfully with no result in 17 ms.

Глядя на панель SQL в pgAdmin III я вижу

CREATE TABLE bar
(
  pkey serial NOT NULL,
  value integer,
  CONSTRAINT foo_pkey PRIMARY KEY (pkey )
)
WITH (
  OIDS=FALSE
);
ALTER TABLE bar
  OWNER TO postgres;

DEFAULT nextval('foo_pkey_seq'::regclass), ушел

ВОПРОСОВ

ПочемуDEFAULT nextval('foo_pkey_seq'::regclass) Заявление появляется и исчезает?Есть ли способ переименовать таблицу и одновременно переименовать последовательность первичных ключей?Безопасно ли переименовывать таблицу, затем последовательность, пока клиенты подключены к базе данных, есть ли проблемы с параллелизмом?Как Postgres знает, какую последовательность использовать? Есть ли триггер базы данных для внутреннего использования? Есть ли что-нибудь еще, чтобы переименовать, кроме таблицы и последовательности?Как насчет неявного индекса, созданного первичным ключом? Это должно быть переименовано? Если так, как это можно сделать?А как насчет имени ограничения выше? Это все ещеfoo_pkey, Как ограничение переименовано?

Ответы на вопрос(1)

Ваш ответ на вопрос