gpt4 book ai didi

sql - 复制表(创建表) - 不保持自动递增主键

转载 作者:行者123 更新时间:2023-11-29 12:43:20 24 4
gpt4 key购买 nike

我是 postgres 的新手(在 9.5 上),我在文档中的任何地方都找不到这个。

基本上像这样创建一个表:

CREATE TABLE test (
id serial primary key,
field1 CHARACTER VARYING(50)
);

然后复制:

create table test_copy (like test);

表测试有这些列:

COLUMN_NAME id  field1
DATA_TYPE 4 12
TYPE_NAME serial varchar
COLUMN_SIZE 10 50
IS_NULLABLE NO YES
IS_AUTOINCREMENT YES NO

但是test_copy有这些:

COLUMN_NAME id  field1
DATA_TYPE 4 12
TYPE_NAME int4 varchar
COLUMN_SIZE 10 50
IS_NULLABLE NO YES
IS_AUTOINCREMENT NO NO

为什么我丢失了序列号和自动增量?我怎样才能制作一个保留这些的表的副本?

最佳答案

这是因为 serial 并不是真正的数据类型。它被“扩展”为一个整数+一个序列+一个默认值。

See the manual for details

要获得默认定义,您需要使用create table test_copy (like test INCLUDING DEFAULTS)

但是,这将使用与原始表格相同 的序列。

psql 中显示表定义时,您可以看到不同之处:

psql (9.5.3)
Type "help" for help.

postgres=> CREATE TABLE test (
postgres(> id serial primary key,
postgres(> field1 CHARACTER VARYING(50)
postgres(> );
CREATE TABLE
postgres=> create table test_copy_no_defaults (like test);
CREATE TABLE
postgres=> create table test_copy (like test including defaults);
CREATE TABLE
postgres=> \d test
Table "public.test"
Column | Type | Modifiers
--------+-----------------------+---------------------------------------------------
id | integer | not null default nextval('test_id_seq'::regclass)
field1 | character varying(50) |
Indexes:
"test_pkey" PRIMARY KEY, btree (id)

postgres=> \d test_copy
Table "public.test_copy"
Column | Type | Modifiers
--------+-----------------------+---------------------------------------------------
id | integer | not null default nextval('test_id_seq'::regclass)
field1 | character varying(50) |

postgres=> \d test_copy_no_defaults
Table "public.test_copy_no_defaults"
Column | Type | Modifiers
--------+-----------------------+-----------
id | integer | not null
field1 | character varying(50) |

关于sql - 复制表(创建表) - 不保持自动递增主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38014554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com