Как сделать полный скрипт CREATE TABLE

В pgAdmin при создании нового скрипта для таблицы SCRIPTS | CREATE scripts

Вы получаете что-то вроде

CREATE TABLE public.merchant_tracker_avl
(
  avl_id bigint NOT NULL DEFAULT nextval('merchant_tracker_avl_avl_id_seq'::regclass),
  x_lat numeric(10,6) NOT NULL,
  y_long numeric(10,6) NOT NULL,
  event_time timestamp without time zone NOT NULL,
  CONSTRAINT merchant_tracker_avl_pk PRIMARY KEY (avl_id)
);

Проблема в другом сервере, где я пытаюсь создать таблицу, последовательность не существует.

Поэтому я должен вручную изменить сценарий на...

CREATE TABLE public.merchant_tracker_avl
(
  avl_id serial NOT NULL,
  ....

И этот скрипт генерирует таблицу и последовательность.

Итак, как я могу заставить pgAdmin генерировать правильный скрипт, чтобы не вносить такие ручные изменения?


person Juan Carlos Oropeza    schedule 15.11.2016    source источник
comment
какую версию pgadmin вы используете?   -  person maahl    schedule 15.11.2016
comment
Версия @maahl 1.22.1 пришла с postgres-9.5   -  person Juan Carlos Oropeza    schedule 15.11.2016
comment
Возможно, вам стоит попробовать обновиться до версии 1.1 (похоже, авторы pgAdmin не понимают, как работают номера версий. ..)   -  person IMSoP    schedule 15.11.2016
comment
@IMSoP Похоже, 1.1 предназначен для pgAdmin 4, у меня есть pgAdmin 3, можете ли вы попробовать создать сценарий для серийного поля и сообщить мне, если дадите правильный сценарий? Я не хочу вносить изменения, если это не исправить.   -  person Juan Carlos Oropeza    schedule 15.11.2016
comment
Да, я был слегка педантичен, потому что считаю нелепым, что они не называются 3.22.1 и 4.1 соответственно. Но я подумал, что, возможно, стоит установить и посмотреть, будет ли у вас другое поведение (я полагаю, вы можете просто установить оба бок о бок, это просто настольные клиентские приложения, никак не привязанные к серверу).   -  person IMSoP    schedule 16.11.2016


Ответы (1)


Сценарий, который вы отображаете, — это то, что вы получаете, если есть что-то отличное от фактического столбца serial. serial не является фактическим типом данных, просто удобным сокращением синтаксиса.

pgAdmin выполняет реинжиниринг кода SQL DDL с serial, если все критерии соблюдены.

Обычно это не OWNED по столбцу, который вы можете исправить с помощью:

ALTER SEQUENCE merchant_tracker_avl_avl_id_seq
OWNED BY public.merchant_tracker_avl.avl_id;

Связанный:

person Erwin Brandstetter    schedule 15.11.2016
comment
Вы дважды ставите одну и ту же ссылку. Не уверен, что двойная control-v или скопирована неправильная ссылка. - person Juan Carlos Oropeza; 16.11.2016
comment
Что означает, что pgAdmin выполняет реверс-инжиниринг только в одном направлении? Проблема в том, что мне нужен скрипт, чтобы я мог создать таблицу в другой базе данных. Конечно, я могу создать последовательность сам, но мы все знаем, что происходит, когда вы делаете что-то вручную :( - person Juan Carlos Oropeza; 16.11.2016
comment
Вы можете исправить исходную БД, вы можете исправить сценарий SQL или вы можете исправить целевую БД. Твой выбор. pgAdmin просто отображает то, что находит. Прочитайте подробное описание в связанном ответе: - stackoverflow.com/questions/14649682/ - person Erwin Brandstetter; 16.11.2016