diff --git a/README.md b/README.md index 4a4e7a1..6a106cb 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/postgres/create-a-table-from-the-structure-of-another.md b/postgres/create-a-table-from-the-structure-of-another.md new file mode 100644 index 0000000..b85b4dd --- /dev/null +++ b/postgres/create-a-table-from-the-structure-of-another.md @@ -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/)