【问题标题】:How make a complete CREATE TABLE script如何制作完整的 CREATE TABLE 脚本
【发布时间】:2016-11-15 19:36:11
【问题描述】:

在 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 生成正确的脚本,这样就不必进行那种手动更改?

【问题讨论】:

  • 你使用的是什么版本的pgadmin?
  • @maahl 版本 1.22.1 附带 postgres-9.5
  • 也许你应该试试upgrading to version 1.1(pgAdmin 的作者似乎不明白版本号是如何工作的......)
  • @IMSoP 看起来 1.1 适用于 pgAdmin 4,我有 pgAdmin 3 您可以尝试为串行字段创建脚本并让我知道是否提供正确的脚本吗?如果不修复,我不想做出改变。
  • 是的,我有点迂腐,因为我认为它们分别不被称为 3.22.1 和 4.1 是荒谬的。但我认为它可能值得安装并看看你是否有不同的行为(我想你可以并排安装它们,它们只是桌面客户端应用程序,不会以任何方式绑定到服务器)。

标签: sql postgresql create-table pgadmin postgresql-9.5


【解决方案1】:

如果与实际的serial 列不同,则显示的脚本就是您所得到的。 serial 不是实际的数据类型,just a convenient syntax shorthand

pgAdmin 是否如果满足所有条件,则使用 serial 对 SQL DDL 代码进行反向工程。

通常不是OWNED 列 - 您可以通过以下方式修复:

ALTER SEQUENCE merchant_tracker_avl_avl_id_seq
OWNED BY public.merchant_tracker_avl.avl_id;

相关:

【讨论】:

  • 你把同一个链接放了两次。不确定是加倍control-v 还是复制错误的链接。
  • 这意味着 pgAdmin 只在一个方向上进行逆向工程?问题是我想要脚本,所以我可以在其他数据库中创建表。当然我可以自己创建序列,但是我们都知道手动操作会发生什么:(
  • 您可以修复源数据库,您可以修复 SQL 脚本,也可以修复目标数据库。你的选择。 pgAdmin 只显示它找到的内容。阅读链接答案中的详细说明:-stackoverflow.com/questions/14649682/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2013-06-29
  • 2018-10-05
相关资源
最近更新 更多