(Bottom Half of Screen)
      Intro to PL/Python

         Josh Williams
                
What is PL/Python?
       Procedural Language INSIDE PostgreSQL
       Not a replacement for SQL
       Run manually (f...
Why PostgreSQL?
       Powerful, yet very fast.
       Feature rich, but you can't beat the price.
       It's future i...
Why Python?
       Easy to read.  Easy to learn.  Easy to use.
       Powerful, yet very fast.
       Possibly already ...
Okay, enough crowd pandering
       Step 1: Configure PostgreSQL for Python
       Step 2: Install PL/Python into databa...
1. Configure PG for Python
       If using source, `./configure ­­with­python`
       If using packages, install ”­plpyt...
Is it there?
       SELECT * FROM pg_pltemplate;
       tmplname == plpythonu
           or plpython2u
           or p...
Wait, u?
       PL/Python is an untrusted language...
       Only DB superusers can create functions :(
       Function...
2. Enable Databases
       Command line: createlang plpythonu dbname
       Inside DB: CREATE LANGUAGE plpythonu;
      ...
CREATE FUNCTION...
        CREATE FUNCTION function_name (....)
          AS $dollarquote$ ...python here...
          ......
The ...python here... bit
       Where the interesting Python­y stuff happens
       Simple processing of function param...
The web IN your database redux
       Need a type to represent composite RSS data
       Need RSS reader module … feedpa...
It works!
       But 11 lines?  This is Python, we can do better!
       There … Two lines (plus the module import)


  ...
Something a little more fancy
       Create two really basic functions:
CREATE FUNCTION pydir(text) RETURNS SETOF text......
Enter Recursive Queries (8.4+)
       CTE construct: WITH RECURSIVE …
       Initial value(s) UNION recursive query
    ...
But that's usual Python stuff
       PL/Python implicitly includes module ”plpy”
           Execute SQL statements
     ...
Last contrived example
       Basic personal finance application
       Add a trigger: Net balance must be positive


  ...
Two Step Process
       CREATE FUNCTION … RETURNS trigger
       CREATE TRIGGER accounts_check AFTER
           INSERT ...
Boooring
       Wait, we're using Python.  We can do more!
       How about an early warning email?
           See pack...
That's PL/Python


       Any questions?


               
Intro to PL/Python

    http://joshwilliams.name/plpython/ (Now!)

     In the mean time: joshwilliams@ij.net
            ...
Upcoming SlideShare
Loading in …5
×

Pl/Python

4,031 views

Published on

Josh Williams

You may be familiar with connecting to a database using Python, but did you know it's possible for your database itself to use Python? PostgreSQL has the ability to write functions and procedures in PL/Python, which can use Python to both work with data inside your database, and bring in information from the outside world. This tutorial-format demonstration is designed to show you how to get up and running on PL/Python, and some of the cool things you can accomplish using it.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,031
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
33
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Pl/Python

  1. 1. (Bottom Half of Screen) Intro to PL/Python Josh Williams    
  2. 2. What is PL/Python?  Procedural Language INSIDE PostgreSQL  Not a replacement for SQL  Run manually (functions / DO in 9.0)  or automatically (triggers)    
  3. 3. Why PostgreSQL?  Powerful, yet very fast.  Feature rich, but you can't beat the price.  It's future is clear!    
  4. 4. Why Python?  Easy to read.  Easy to learn.  Easy to use.  Powerful, yet very fast.  Possibly already using it outside the database.  It's Python!!    
  5. 5. Okay, enough crowd pandering  Step 1: Configure PostgreSQL for Python  Step 2: Install PL/Python into database(s)  Step 3: Profit    
  6. 6. 1. Configure PG for Python  If using source, `./configure ­­with­python`  If using packages, install ”­plpython” or ”­py...”  In either case you need Python installed (duh)    
  7. 7. Is it there?  SELECT * FROM pg_pltemplate;  tmplname == plpythonu  or plpython2u  or plpython3u    
  8. 8. Wait, u?  PL/Python is an untrusted language...  Only DB superusers can create functions :(  Functions can communicate outside the DB :)    
  9. 9. 2. Enable Databases  Command line: createlang plpythonu dbname  Inside DB: CREATE LANGUAGE plpythonu;  Hint: Install in template1  SELECT * FROM pg_language;    
  10. 10. CREATE FUNCTION... CREATE FUNCTION function_name (....) AS $dollarquote$ ...python here... ... $dollarquote$ LANGUAGE plpythonu;  See ”Intro to PL/pgSQL” for construct details    
  11. 11. The ...python here... bit  Where the interesting Python­y stuff happens  Simple processing of function parameters  But also... Import modules (stats, XML, ASCII plot?)  Interact with the outside world, the inside world    
  12. 12. The web IN your database redux  Need a type to represent composite RSS data  Need RSS reader module … feedparser!  CREATE FUNCTION … RETURNS SETOF …    
  13. 13. It works!  But 11 lines?  This is Python, we can do better!  There … Two lines (plus the module import)    
  14. 14. Something a little more fancy  Create two really basic functions: CREATE FUNCTION pydir(text) RETURNS SETOF text... CREATE FUNCTION isdir(text) RETURNS boolean...  Call SRF using just SELECT pydir('/')    
  15. 15. Enter Recursive Queries (8.4+)  CTE construct: WITH RECURSIVE …  Initial value(s) UNION recursive query  Then SELECT … FROM cte    
  16. 16. But that's usual Python stuff  PL/Python implicitly includes module ”plpy”  Execute SQL statements  Generates messages/raises errors back to PG    
  17. 17. Last contrived example  Basic personal finance application  Add a trigger: Net balance must be positive    
  18. 18. Two Step Process  CREATE FUNCTION … RETURNS trigger  CREATE TRIGGER accounts_check AFTER  INSERT OR UPDATE ON accounts FOR EACH  STATEMENT EXECUTE PROCEDURE accheck();    
  19. 19. Boooring  Wait, we're using Python.  We can do more!  How about an early warning email?  See package smtplib    
  20. 20. That's PL/Python Any questions?    
  21. 21. Intro to PL/Python http://joshwilliams.name/plpython/ (Now!) In the mean time: joshwilliams@ij.net    

×