1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 07:08:01 +00:00

Add Create A Table From The Structure Of Another as a Postgres TIL

This commit is contained in:
jbranchaud
2022-05-21 15:58:04 -05:00
parent 98ec0c18b2
commit 761fa46704
2 changed files with 46 additions and 1 deletions

View File

@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
_1200 TILs and counting..._
_1201 TILs and counting..._
---
@@ -566,6 +566,7 @@ _1200 TILs and counting..._
- [Count Records By Type](postgres/count-records-by-type.md)
- [Count The Number Of Trues In An Aggregate Query](postgres/count-the-number-of-trues-in-an-aggregate-query.md)
- [Create A Composite Primary Key](postgres/create-a-composite-primary-key.md)
- [Create A Table From The Structure Of Another](postgres/create-a-table-from-the-structure-of-another.md)
- [Create An Index Without Locking The Table](postgres/create-an-index-without-locking-the-table.md)
- [Create Database Uses Template1](postgres/create-database-uses-template1.md)
- [Create hstore From Two Arrays](postgres/create-hstore-from-two-arrays.md)

View File

@@ -0,0 +1,44 @@
# Create A Table From The Structure Of Another
There are a couple ways to create a new table from the structure of another table.
One of those ways is with the [`create table as`
syntax](https://www.postgresql.org/docs/current/sql-createtableas.html).
```sql
create table dupe_table as table existing_table with no data;
```
I wouldn't recommend this approach though because it only reproduces the
columns and datatypes. The modifiers, indexes, and constraints are not
included.
The [`create table`
syntax](https://www.postgresql.org/docs/current/sql-createtable.html), on the
other hand, gives you more options and flexibility for this kind of task.
```sql
create table dupe_table (like existing_table);
```
This works just like the first statement, reproducing just the columns and
datatypes.
There are options for enhancing this statement. We can tell it to additionally
_include_ things like `defaults`, `indexes`, `constraints`, or even just
_everything_ (`including all`).
Here is what it looks like to copy the `existing_table` so that things like
`not null`, B-Tree indexes, and primary key `default` values are reproduced
along with the columns and datatypes.
```sql
create table dupe_table (
like existing_table
including defaults
including indexes
including constraints
)
```
[source](https://www.reddit.com/r/PostgreSQL/comments/uu8xcs/comment/i9e36m2/)