The pgx Files 02: Table Creation
14 Aug 2016
Let's make a users table to test with.
Here's how we do it with psql:
$ psql -U postgres -d postgres
Note that I'm creating the uuid-ossp extension in my postgres database because I haven't set that up yet, but I did compile in the uuid-ossp library, because I want to use the UUID type in my users table.
# create extension "uuid-ossp";
# create table users (
id uuid constraint user_pk primary key default uuid_generate_v4() not null,
username text constraint unique_username unique not null,
password text not null, -- wow, this is totally not secure
first_name text not null,
last_name text not null);
# commit;
OK, so that definition works well at the psql command line; now let's drop the table we just created...
# drop table users; # commit;
... and do the same thing through pgx.
package main
import (
"fmt"
"os"
"github.com/manniwood/playground/pgxfiles"
)
func main() {
conn := util.Connect("users table maker")
defer conn.Close()
_, err := conn.Exec(`
create table users (
id uuid constraint user_pk primary key default uuid_generate_v4() not null,
username text constraint unique_username unique not null,
password text not null, -- wow, this is totally not secure
first_name text not null,
last_name text not null);
`)
if err != nil {
fmt.Fprintf(os.Stderr, "Unable to create users table: %v\n", err)
os.Exit(1)
}
fmt.Printf("Successfully created users table\n")
}
Let's run after compiling...
$ ./createdb Successfully created users table
That seems to have worked nicely.
What does my psql session think?
# \d users
Table "public.users"
┌────────────┬──────┬─────────────────────────────────────┐
│ Column │ Type │ Modifiers │
├────────────┼──────┼─────────────────────────────────────┤
│ id │ uuid │ not null default uuid_generate_v4() │
│ username │ text │ not null │
│ password │ text │ not null │
│ first_name │ text │ not null │
│ last_name │ text │ not null │
└────────────┴──────┴─────────────────────────────────────┘
Indexes:
"user_pk" PRIMARY KEY, btree (id)
"unique_username" UNIQUE CONSTRAINT, btree (username)
Good stuff.
What if I run createdb again?
$ ./createdb Unable to create users table: ERROR: relation "users" already exists (SQLSTATE 42P07)
Excellent.
Next, on The pgx Files... inserting users, and trapping for usernames that already exist!