PostgreSQL Basic Commands

You can always check the manual and its useful Appendixes section.

  • versioning: article

      # in Ubuntu: check currently installed versions:
      $ dpkg --get-selections | grep postgres
    
  • PostgreSQL packages for Debian and Ubuntu

    Quickstart and News, how to install the latest packages of your distribution

  • prompt

      # on mac
      $ psql db_name
      db_name=>
    
  • In Ubuntu, commands are a little bit different, check here: PostgreSQL manual in Ubuntu

      $ sudo -u postgres psql db_name
      db_name=#
      # 'sudo -u postgres' <-- means command on behalf of superuser 'postgres'
    
      # you can also switch to superuser like this:
      $ sudo su - postgres
      $ psql
      postgres=#
    
  • change postgres password

      $ sudo -u postgres psql
      postgres=> \password
    
  • restart psql server

      $ sudo systemctl restart postgresql
    
  • quick command in Ubuntu

      $ sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
      $ sudo -u postgres psql -c "CREATE DATABASE testdb;"
    
  • start and stop postgresql service

      $ sudo service postgresql start
        
      $ sudo service postgresql stop
    
  • createdb and dropdb

      $ createdb db_name
      # if db_name is not specified, system user name will be used as the db_name
    
      $ dropdb mydb
      # a db_name has to be specified
    
  • psql - PostgreSQL interactive terminal commands:

      mydb=> SELECT version();
      mydb=> SELECT current_date;
      mydb=> \h
      mydb=> \q
    
  • create table columns (header)

      mydb=>
      CREATE TABLE weather (
          city            varchar(80),
          temp_lo         int,           -- low temperature
          temp_hi         int,           -- high temperature
          prcp            real,          -- precipitation
          date            date
      );
      ## -- comment, code after this won't be executed
    
      mydb=>
      CREATE TABLE cities (
          name            varchar(80),  -- this is a column
          location        point         -- another column
      );
    
  • delete a table

      mydb=> DROP TABLE tablename;
    
  • insert rows

    after the columns are defined you can INSERT data in rows:

      mydb=>
      INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
    
      INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)')
    

    If you do not remember the order of the column:

      mydb=>
      INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
      VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');
    
      INSERT INTO weather (date, city, temp_hi, temp_lo)
      VALUES ('1994-11-29', 'Hayward', 54, 37);
    
  • COPY

      mydb=>
      COPY weather FROM '/home/user/weather.txt';
    
  • Querying a Table

    • to retrieve all the rows of table weather

        # option 1
        SELECT * FROM weather;
        # option 2
        SELECT city, temp_lo, temp_hi, prcp, date FROM weather;
        # exactly the same output
      

      | city | temp_lo | temp_hi | prcp | date| |————|———|———|——-|————-| |San Francisco | 46 | 50 | 0.25 | 1994-11-27| |San Francisco | 43 | 57 | 0 | 1994-11-29| |Hayward | 37 | 54 | | 1994-11-29|

    • flexible and editable

        SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
       city        | temp_avg |    date
        ---------------+----------+------------
        San Francisco  |       48 | 1994-11-27
        San Francisco  |       50 | 1994-11-29
        Hayward        |       45 | 1994-11-29
      
    • be selective / filtering

      Retrieve the weather of San Francisco on rainy days

        SELECT * FROM weather
        WHERE city = 'San Francisco' AND prcp > 0.0;
        # AND, OR, NOT can be used as Boolean operators
      
    • ordering

        SELECT * FROM weather
        ORDER BY city;
              
      
            city      | temp_lo | temp_hi | prcp |    date
        ---------------+---------+---------+------+------------
        Hayward       |      37 |      54 |      | 1994-11-29
        San Francisco |      43 |      57 |    0 | 1994-11-29
        San Francisco |      46 |      50 | 0.25 | 1994-11-27
      
    • be DISTINCT

        SELECT DISTINCT city
        FROM weather;
      
        city
        ---------------
        Hayward
        San Francisco
        (2 rows)
      
    • be DISTINCE in ORDER

        SELECT DISTINCT city
        FROM weather
        ORDER BY city;
      
  • UPDATE

    Suppose you discover the temperature readings are all off by 2 degrees after November 28. You can correct the data as follows:

      UPDATE weather
          SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
          WHERE date > '1994-11-28';
    
  • DELETE

    Delete rows whoes data matches value preceded by WHERE:

      DELETE FROM weather WHERE city = 'Hayward';
    

    ### Note: The system will not request confirmation before command like this:

      DELETE FROM tablename;
    

    All rows from the tabel will be removed, leaving an empty table.