【原创】PostgreSQL快速创建空表TIPS
MySQL 有一个和优秀的语法 create table ... like , 可以快速复制一张表,创建其副本。 PostgreSQL 也有类似的语法,而且更加灵活,不过要注意些细节。 先来看看MySQL 语法: create table ... like 原始表T1,结构如下: +----------+------------------+-
MySQL 有一个和优秀的语法 create table ... like , 可以快速复制一张表,创建其副本。 PostgreSQL 也有类似的语法,而且更加灵活,不过要注意些细节。
先来看看MySQL 语法: create table ... like
原始表T1,结构如下:
+----------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | log_time | datetime(6) | YES | | NULL | | +----------+------------------+------+-----+---------+----------------+
快速做一张副本:
mysql> create table t2 like t1; Query OK, 0 rows affected (0.03 sec)
这时会有一张相同的副本表快速产生:
+----------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | log_time | datetime(6) | YES | | NULL | | +----------+------------------+------+-----+---------+----------------+
这时注意到,这里用到自增字段作为主键,不过MySQL 这类语法不会沿用原始表的自增位置,还是从头开始。不过这点说起来难免搞笑,因为MySQL没有单独的序列。
mysql> insert into t2 (log_time) select now(); Query OK, 1 row affected (0.00 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> select * from t2; +----+----------------------------+ | id | log_time | +----+----------------------------+ | 1 | 2014-11-27 13:44:12.000000 | +----+----------------------------+ 1 row in set (0.00 sec)
现在来看下PostgreSQL:
原始表结构如下, 包含了一个序列作为主键。
Table "ytt_sql.t1" Column | Type | Modifiers ----------+-----------------------------+------------------------------------------------- id | integer | not null default nextval('t1_id_seq'::regclass) log_time | timestamp without time zone | Indexes: "t1_pkey" PRIMARY KEY, btree (id)
用类似的语法create table ... like 来创建副本:
t_girl=# create table t2 (like t1 including all); CREATE TABLE Time: 50.035 ms
副本的表结构如下,不过可能发现了一个问题,连同原始表的序列也一起弄过来了,这个太不安全了。
Table "ytt_sql.t2" Column | Type | Modifiers ----------+-----------------------------+------------------------------------------------- id | integer | not null default nextval('t1_id_seq'::regclass) log_time | timestamp without time zone | Indexes: "t2_pkey" PRIMARY KEY, btree (id)
而此时查看到这个序列的指针已经是120了,那么副本表的记录不是要从120开始?而且副本表的插入或者其他写入操作都会影响原始表!
t_girl=# select currval('t1_id_seq'); currval --------- 120 (1 row) Time: 3.771 ms
所以这时重新创建一个新的序列给副本表专用:
t_girl=# create sequence t2_id_seq; CREATE SEQUENCE Time: 12.744 ms
更新这列的默认值。
t_girl=# alter table t2 alter id set default nextval('t2_id_seq'); ALTER TABLE Time: 5.002 ms
这时候插入些记录看看:
t_girl=# insert into t2 (log_time) values ....; INSERT 0 10 Time: 10.331 ms
这时记录从1开始了:
t_girl=# select * from t2; id | log_time ----+---------------------------- 1 | 2014-03-09 06:49:14.393962 2 | 2005-12-30 05:49:14.393962 3 | 2014-05-17 20:49:14.393962 4 | 2004-06-15 22:49:14.393962 5 | 2010-06-19 03:49:14.393962 ... 10 | 2009-09-07 23:49:14.393962 (10 rows) Time: 4.958 ms
不过我这里LIKE了所有选项,也可以不不包括默认值,这样,序列本身就不会复制进来了。
t_girl=# create table t2 (like t1 including all excluding defaults); CREATE TABLE Time: 40.292 ms
Table "ytt_sql.t2" Column | Type | Modifiers ----------+-----------------------------+----------- id | integer | not null log_time | timestamp without time zone | Indexes: "t2_pkey" PRIMARY KEY, btree (id)
这里也可以不用LIKE 选项,直接用类似CREATE TABLE AS ...语法,如下:
创建没有记录的空表,但是这里只包含了表结构以及字段相关。
t_girl=# create table t2 as table t1 with no data; SELECT 0 Time: 15.562 ms 或者 t_girl=# create table t2 as select * from t1 where false; SELECT 0 Time: 14.181 ms
我们手动给添加主键以及默认值。
t_girl=# alter table t2 add constraint pk_t2_id primary key (id), alter id set default nextval('t2_id_seq'); ALTER TABLE Time: 41.105 ms
结构跟原来一样了。
Table "ytt_sql.t2" Column | Type | Modifiers ----------+-----------------------------+------------------------------------------------- id | integer | not null default nextval('t2_id_seq'::regclass) log_time | timestamp without time zone | Indexes: "pk_t2_id" PRIMARY KEY, btree (id)

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

제목: Realme Phone 초보자 가이드: Realme Phone에서 폴더를 만드는 방법은 무엇입니까? 현대 사회에서 휴대폰은 사람들의 삶에 없어서는 안 될 도구가 되었습니다. 인기 스마트폰 브랜드인 Realme Phone은 간단하고 실용적인 운영 체제로 사용자들에게 사랑을 받고 있습니다. Realme 휴대폰을 사용하는 과정에서 많은 사람들이 휴대폰에 있는 파일과 애플리케이션을 정리해야 하는 상황에 직면할 수 있는데, 폴더를 만드는 것이 효과적인 방법입니다. 이 기사에서는 사용자가 휴대폰 콘텐츠를 더 잘 관리할 수 있도록 Realme 휴대폰에서 폴더를 만드는 방법을 소개합니다. 아니요.

Windows에서 픽셀 아트 제작을 위해 김프를 사용하는 데 관심이 있다면 이 기사가 흥미로울 것입니다. GIMP는 무료 오픈 소스일 뿐만 아니라 사용자가 아름다운 이미지와 디자인을 쉽게 만들 수 있도록 도와주는 잘 알려진 그래픽 편집 소프트웨어입니다. 초보자와 전문 디자이너 모두에게 적합할 뿐만 아니라, 김프는 그리기와 창작을 위한 유일한 구성 요소로 픽셀을 활용하는 디지털 아트의 한 형태인 픽셀 아트를 만드는 데에도 사용할 수 있습니다. 김프에서 픽셀 아트를 만드는 방법 Windows PC에서 김프를 사용하여 픽셀 그림을 만드는 주요 단계는 다음과 같습니다. 김프를 다운로드하여 설치한 다음 응용 프로그램을 시작합니다. 새 이미지를 만듭니다. 너비와 높이의 크기를 조정합니다. 연필 도구를 선택합니다. 브러시 유형을 픽셀로 설정합니다. 설정

많은 친구들이 Gree+ 소프트웨어에서 가족을 만드는 방법을 알고 싶다고 말했습니다. 자세한 내용을 알고 싶은 친구들은 저와 함께 살펴보세요. 먼저 휴대폰에서 Gree+ 소프트웨어를 열고 로그인하세요. 그런 다음 페이지 하단의 옵션 표시줄에서 맨 오른쪽에 있는 "내" 옵션을 클릭하여 개인 계정 페이지로 들어갑니다. 2. 내 페이지에 접속한 후 "가족" 아래에 "가족 만들기" 옵션이 있습니다. 찾은 후 클릭하여 들어갑니다. 3. 다음으로 가족을 생성하는 페이지로 이동하여 프롬프트에 따라 입력 상자에 설정할 가족 이름을 입력하고 입력 후 오른쪽 상단의 "저장" 버튼을 클릭합니다. 4. 마지막으로 페이지 하단에 "저장 성공" 메시지가 나타나 패밀리가 성공적으로 생성되었음을 나타냅니다.

Highcharts를 사용하여 간트 차트를 만드는 방법에는 특정 코드 예제가 필요합니다. 소개: 간트 차트는 프로젝트 진행 상황 및 시간 관리를 표시하는 데 일반적으로 사용되는 차트 형식으로 작업의 시작 시간, 종료 시간 및 진행 상황을 시각적으로 표시할 수 있습니다. Highcharts는 풍부한 차트 유형과 유연한 구성 옵션을 제공하는 강력한 JavaScript 차트 라이브러리입니다. 이 기사에서는 Highcharts를 사용하여 Gantt 차트를 만드는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 하이차트

iOS17에서 Apple은 일반적으로 사용되는 전화 및 연락처 앱에 연락처 포스터 기능을 추가했습니다. 이 기능을 통해 사용자는 각 연락처에 대해 개인화된 포스터를 설정할 수 있어 주소록을 더욱 시각적이고 개인적으로 만들 수 있습니다. 연락처 포스터는 사용자가 특정 연락처를 더 빠르게 식별하고 찾는 데 도움이 되어 사용자 경험을 향상시킵니다. 이 기능을 통해 사용자는 자신의 선호도와 요구 사항에 따라 각 연락처에 특정 사진이나 로고를 추가할 수 있어 주소록 인터페이스가 더욱 생생해집니다. iOS17의 Apple은 iPhone 사용자에게 자신을 표현하는 새로운 방법을 제공하고 개인화 가능한 연락처 포스터를 추가했습니다. 연락처 포스터 기능을 사용하면 다른 iPhone 사용자에게 전화할 때 고유하고 개인화된 콘텐츠를 표시할 수 있습니다. 너

Django 프로젝트 여정을 시작하세요. 명령줄에서 시작하여 첫 번째 Django 프로젝트를 만드세요. Django는 Python을 기반으로 하며 웹 애플리케이션 개발에 필요한 많은 도구와 기능을 제공합니다. 이 문서에서는 명령줄에서 시작하여 첫 번째 Django 프로젝트를 만드는 방법을 안내합니다. 시작하기 전에 Python과 Django가 설치되어 있는지 확인하세요. 1단계: 프로젝트 디렉터리 생성 먼저 명령줄 창을 열고 새 디렉터리를 생성합니다.

SpringBoot와 SpringMVC를 비교하고 차이점을 이해하십시오. Java 개발의 지속적인 개발로 인해 Spring 프레임워크는 많은 개발자와 기업에서 첫 번째 선택이 되었습니다. Spring 생태계에서 SpringBoot와 SpringMVC는 매우 중요한 두 가지 구성 요소입니다. 둘 다 Spring 프레임워크를 기반으로 하지만 기능과 사용법에 약간의 차이가 있습니다. 이 기사에서는 SpringBoot와 Spring을 비교하는 데 중점을 둘 것입니다.

Win11에서 "내 컴퓨터" 경로의 차이점은 무엇입니까? 빨리 찾는 방법! Windows 시스템이 지속적으로 업데이트됨에 따라 최신 Windows 11 시스템도 몇 가지 새로운 변경 사항과 기능을 제공합니다. 일반적인 문제 중 하나는 사용자가 Win11 시스템에서 "내 컴퓨터"에 대한 경로를 찾을 수 없다는 것입니다. 이는 일반적으로 이전 Windows 시스템에서는 간단한 작업이었습니다. 이 기사에서는 Win11 시스템에서 "내 컴퓨터"의 경로가 어떻게 다른지, 그리고 이를 빠르게 찾는 방법을 소개합니다. Windows1에서
