Index
A
- acquisition cost / Cost of acquisition
- add(int, int)
- functionality, adding / Adding functionality to add(int, int)
- NULL arguments / Smart handling of NULL arguments
- multiple arguments, working with / Working with any number of arguments
- add_ab(PG_FUNCTION_ARGS) / add_func.c
- add_func.c
- about / add_func.c
- #include *postgres.h* / add_func.c
- #include *fmgr.h* / add_func.c
- PG_MODULE_MAGIC; / add_func.c
- PG_FUNCTION_INFO_V1(add_ab); / add_func.c
- Datum / add_func.c
- add_ab(PG_FUNCTION_ARGS) / add_func.c
- add_func.sql.in / add_func.sql.in
- add_one() function / A simple function
- AFTER trigger / Simple "Hey, I'm called" trigger, Disallowing TRUNCATE, Visibility
- ALTER EXTENSION ADD command / When to create an extension
- ANY parameter / Other parameters
- application design
- about / Application design
- databases, drawbacks / Databases are considered harmful
- encapsulation / Encapsulation
- data locality / Data locality
- arrays
- about / Sets and arrays
- assert
- using / Using assert
- auditing
- ways / Auditing changes
- about / Auditing changes
- audit log
- updating / Immutable fields trigger
- audit trigger
- creating / The audit trigger
B
- backend
- synchronizing between / Synchronizing between backends
- BEFORE trigger / Disallowing DELETE, Disallowing TRUNCATE, Visibility
C
- .control file
- about / The .control file
- documentation, URL / The .control file
- C
- additional resources / Additional resources for C
- caching / On caching
- cancel trigger / Disallowing DELETE
- cancel_op() / Disallowing TRUNCATE
- C code, writing
- guidelines / Basic guidelines for writing C code
- memory allocation / Memory allocation
- C function
- add_func.c / add_func.c
- makefile function / Makefile
- CREATE FUNCTION add(int, int) / CREATE FUNCTION add(int, int)
- add_func.sql.in / add_func.sql.in
- writing / Summary for writing a C function
- error, reporting from / Error reporting from C functions
- URL / Additional resources for C
- C function, error reporting
- Error, stating / "Error" states that are not errors
- messages sent, to client / When are messages sent to the client
- changestamp() trigger function / Immutable fields trigger
- CLUSTER statement / CONNECT, CLUSTER, and RUN ON
- commit
- about / Doing something at commit/rollback
- community / Community
- Concurrent Versions System (CVS) / Getting the debugger installed
- conditional expression
- example / Trigger on specific field changes
- conditional expressions
- about / Conditional expressions
- URL / Conditional expressions
- loops, with counters / Loops with counters
- query results, looping / Looping through query results
- PERFORM command versus SELECT command / PERFORM versus SELECT
- conditional trigger / Conditional trigger
- CONNECT statement / CONNECT, CLUSTER, and RUN ON
- connect string / CONNECT, CLUSTER, and RUN ON
- context managers
- URL / Handling exceptions
- Coordinated Universal Time (UTC) / The audit trigger
- Cost / More control
- CREATE command / Functions returning a record
- CREATE FUNCTION / add_func.sql.in
- CREATE FUNCTION add(int, int) / CREATE FUNCTION add(int, int)
- CREATE FUNCTION statement / CREATE FUNCTION add(int, int)
- CREATE TABLE statement / Returning a record
- CREATE TYPE command / Returning rows from a function
- ctags
- URL / Additional resources for C
- cursors
- returning / Returning cursors
- about / Returning cursors
- returned from another function, iterating over / Iterating over cursors returned from another function
- returned by functions, wrapup / Wrap up of functions returning a cursor(s)
- advantages / Wrap up of functions returning a cursor(s)
- disadvantages / Wrap up of functions returning a cursor(s)
D
- data
- comparing, operators used / Data comparisons using operators
- cleaning / Data cleaning
- changes, visibility / Visibility of data changes
- partitioning, across multiple servers / Data partitioning across multiple servers
- splitting / Splitting the data
- distributing / Distribution of data
- moving, from single to partitioned database / Moving data from the single to the partitioned database
- data abstraction layer
- about / Databases are considered harmful
- database
- changes, capturing / Fast capturing of database changes
- database, scaling
- single-server chat / Simple single-server chat
- tables, splitting over multiple databases / Dealing with success – splitting tables over multiple databases
- data, moving from single to partitioned database / Moving data from the single to the partitioned database
- database-backed systems, growing
- ways / What expansion plans work and when
- bigger server, moving to / Moving to a bigger server
- Master-slave replication / Master-slave replication – moving reads to slave
- Multi-master replication / Multimaster replication
- database_to_xml(...) function / XML data type and returning data as XML from functions
- data locality
- about / Data locality
- limitations / Data locality
- Data Management Language (DML) / Simple "Hey, I'm called" trigger
- data manipulation code
- advantages / Wrap up – why program in the server?, Simple ways to tighten security
- data type
- conversions / Data type conversions
- data types, complex
- XML / Complex data types for modern world – XML and JSON
- JSON / Complex data types for modern world – XML and JSON
- Datum
- about / add_func.c, Interlude – what is Datum
- datums pointer / Working with any number of arguments
- DBAPI 2 / Running queries in the database
- debugging
- manual debugging / ''Manual'' debugging with RAISE NOTICE
- visual debugging / Visual debugging
- debugging, manual
- with RAISE NOTICE / ''Manual'' debugging with RAISE NOTICE
- exceptions, throwing / Throwing exceptions
- file, logging to / Logging to a file
- debugging, visual
- debugger, installing / Getting the debugger installed
- pgAdmin3, installing / Installing pgAdmin3
- debugger, using / Using the debugger
- DELETE trigger
- about / Simple "Hey, I'm called" trigger
- disallowing / Disallowing DELETE
- dirty read / Transactions
- DO syntax / Constructing queries
- DRY / DRY – don't repeat yourself
E
- e-mail
- sending / Sending an e-mail
- encapsulation
- about / Encapsulation
- ereport() / Error reporting from C functions, When are messages sent to the client
- error codes
- URL / Throwing exceptions
- error handling / General error reporting and error handling
- error reporting / General error reporting and error handling
- from C function / Error reporting from C functions
- URL / When are messages sent to the client
- error_trap_report function / Throwing exceptions
- event_time_utc / The audit trigger
- exceptions
- handling / Handling exceptions
- execute() method / Functions returning a record
- EXECUTE statement / Looping through query results
- extension
- creating / When to create an extension
- OpenFTS, type / When to create an extension
- PostGIS,type / When to create an extension
- URL / When to create an extension
- unpackaged / Unpackaged extensions
- versions / Extension versions
- .control file / The .control file
- building / Building an extension
- installing / Installing an extension
- publishing / Publishing your extension
- project, creating / Creating an extension project the easy way
- code, writing / Writing your extension code
- installing, from PGXN / Installing an extension from PGXN
- extension, altering
- URL / When to create an extension
- extension, publishing
- PostgreSQL Extension Network / Introduction to the PostgreSQL Extension Network
- signing up / Signing up to publish your extension
- extension project, creating / Creating an extension project the easy way
- metadata, providing / Providing the metadata about the extension
- extension code, writing / Writing your extension code
- package, creating / Creating the package
- package, submitting to PGXN / Submitting the package to PGXN
F
- file
- logging / A log trigger
- files
- including / Include files
- file type / A log trigger
- flatten_application_settings() function / Acting on function results
- FOR EACH ROW trigger / Simple "Hey, I'm called" trigger
- format_us_address() function / ''Manual'' debugging with RAISE NOTICE
- function
- about / User-defined functions (UDF)
- arguments, accessing / Accessing function arguments
- results / Acting on function results
- views based / Functions based on views
- record, returning / Functions returning a record
- table functions / Table functions
- progress tracking, plpy.notice() used / Using plpy.notice() for tracking the function's progress
- used, for configuring PL/Proxy cluster / Configuring PL/Proxy cluster using functions
- function overloading / User-defined functions (UDF)
- function parameter / Accessing function arguments
G
- generate_series() function / Simple single-server chat
- get_new_messages() function / Simple single-server chat
- get_user_email() / SELECT and TARGET
- GIN (General Inverted Index) / Type extensibility
I
- #include *fmgr.h* / add_func.c
- #include *postgres.h* / add_func.c
- immutable fields trigger / Immutable fields trigger
- IMMUTABLE function / Visibility
- indexes
- adding, for retrieving messages / Simple single-server chat
- INFO / "Error" states that are not errors
- INOUT parameters / OUT parameters
- INSTEAD OF trigger / Visibility
- integrity checks
- PL/pgSQL, using / Using PL/pgSQL for integrity checks
J
- JSON
- data, returning / Returning data in the JSON format
K
- KISS / KISS – keep it simple stupid
- KNN / Type extensibility
L
- licensing / Licensing
- LOG (and COMMERROR) / "Error" states that are not errors
- log function / A log trigger
- log_min_messages / Logging to a file
- looping syntax
- URL / Loops with counters
- loops
- with counters / Loops with counters
- low cost of failure
- about / Cost of acquisition
M
- Makefile file / Building an extension
- Makefile function / Makefile, add_func.sql.in
- Master-slave replication / Master-slave replication – moving reads to slave
- memory allocation
- about / Memory allocation
- palloc(), using / Use palloc() and pfree()
- pfree(), using / Use palloc() and pfree()
- structures, zero-filling / Zero-fill the structures
- files, including / Include files
- public symbol names / Public symbol names
- memset() / Zero-fill the structures
- metadata
- providing, for extension / Providing the metadata about the extension
- mid function / Structure of a PL/pgSQL function, Accessing function arguments
- Multi-master replication
- about / Multimaster replication
- myfunc function / Returning cursors
- mysetfunc(); function / Returning cursors
- MySQL
- URL / Predictability
N
- NEW record, modifying
- trigger, timestamping / Timestamping trigger
- NEW record trigger
- modifying / Modifying the NEW record
- NOTICE / "Error" states that are not errors
- NULL propagation / ''Manual'' debugging with RAISE NOTICE
O
- object identifier (OID) / Writing trigger functions in PL/Python
- OLD, NEW variable / Variables passed to the PL/pgSQL TRIGGER function
- OpenFTS
- about / When to create an extension
- operators
- used, for data comparisons / Data comparisons using operators
- OUT parameters / OUT parameters
P
- package
- creating / Creating the package
- submitting, to PGXN / Submitting the package to PGXN
- palloc()
- using / Use palloc() and pfree()
- about / Returning a set of records
- part_func() / CONNECT, CLUSTER, and RUN ON
- Pentaho Data Integration (kettle) / Procedural languages
- Pentaho Report Server / Procedural languages
- PERFORM command
- versus SELECT command / PERFORM versus SELECT
- pfree()
- using / Use palloc() and pfree()
- about / Returning a set of records
- pgAdmin3
- installing / Installing pgAdmin3
- PgAdmin3 / Procedural languages, Transactions
- pgfoundry
- URL / Additional resources for C
- about / Additional resources for C
- pgFoundry
- URL / Visual debugging
- PGXN
- package, submitting / Submitting the package to PGXN
- URL / Submitting the package to PGXN
- extension, installing from / Installing an extension from PGXN
- pgxn-utils utility / Creating an extension project the easy way
- PG_FUNCTION_INFO_V1(add_ab); / add_func.c
- PG_MODULE_MAGIC; / add_func.c
- php5-postgesql / Procedural languages
- PL/pgSQL
- used, for integrity checks / Using PL/pgSQL for integrity checks
- about / Using PL/pgSQL for integrity checks, Why PL/pgSQL?
- disadvantages / Why PL/pgSQL?
- URL / Why PL/pgSQL?
- advantages / Why PL/pgSQL?
- cursors, URL / Returning cursors
- PL/pgSQL debugger
- about / Visual debugging
- installing / Getting the debugger installed
- using / Using the debugger
- advantages / Advantages of the debugger
- disadvantages / Disadvantages of the debugger
- PL/pgSQL function
- structure / Structure of a PL/pgSQL function
- arguments, accessing / Accessing function arguments
- PL/pgSQL trigger function
- variables, passed / Variables passed to the PL/pgSQL TRIGGER function
- PL/Proxy
- installing / Installing PL/Proxy
- syntax / PL/Proxy language syntax
- CONNECT statement / CONNECT, CLUSTER, and RUN ON
- CLUSTER statement / CONNECT, CLUSTER, and RUN ON
- RUN ON statement / CONNECT, CLUSTER, and RUN ON
- SELECT statement / SELECT and TARGET
- TARGET statement / SELECT and TARGET
- SPLIT statement / SPLIT – distributing array elements over several partitions
- data, distributing / Distribution of data
- PL/Proxy cluster
- configuring, functions used / Configuring PL/Proxy cluster using functions
- configuring, SQL/MED used / Configuring PL/Proxy cluster using SQL/MED
- PL/Python
- uses / Why PL/Python?
- about / Quick introduction to PL/Python
- function, creating / A minimal PL/Python function
- data type conversions / Data type conversions
- documentation, URL / Data type conversions
- functions, writing / Writing simple functions in PL/Python
- simple function / A simple function
- record, returning by function / Functions returning a record
- table functions / Table functions
- queries, running in database / Running queries in the database
- trigger functions, writing / Writing trigger functions in PL/Python
- queries, constructing / Constructing queries
- exceptions, handling / Handling exceptions
- atomicity / Atomicity in Python
- debugging / Debugging PL/Python
- PL/Python, debugging
- function progress tracking, plpy.notice() used / Using plpy.notice() for tracking the function's progress
- assert, using / Using assert
- sys.stdout, redirecting / Redirecting sys.stdout and sys.stderr
- sys.stderr, redirecting / Redirecting sys.stdout and sys.stderr
- platform compatibility / Platform compatibility
- plproxy.get_cluster_partitions() / Configuring PL/Proxy cluster using SQL/MED
- plproxy.get_cluster_version(cluster_name) function / Configuring PL/Proxy cluster using functions
- plpy.execute() / Running simple queries, Handling exceptions
- plpy.execute(...) function / Debugging PL/Python
- plpy.notice()
- used, for tracking function's progress / Using plpy.notice() for tracking the function's progress
- about / Using plpy.notice() for tracking the function's progress
- plpy.prepare() / Running simple queries, Handling exceptions
- plpy.prepare() function / Debugging PL/Python
- plpy.quote_ident(name) function / Constructing queries
- plpy.quote_literal() method / Functions returning a record
- plpy.quote_literal(litvalue) function / Constructing queries
- plpy.quote_nullable(value_or_none) function / Constructing queries
- plpy.subtransaction() / Handling exceptions
- plugins / Procedural languages
- PostGIS
- about / When to create an extension
- PostgreSQL
- about / Using PL/pgSQL for integrity checks, Availability of developers
- expanded display, switching to / Switching to the expanded display
- acquisition cost / Cost of acquisition
- developers, availability / Availability of developers
- licensing / Licensing
- predictability / Predictability
- URL / Predictability
- community / Community
- procedural languages / Procedural languages
- PostgreSQL, products
- Pentaho Data Integration (kettle) / Procedural languages
- Pentaho Report Server / Procedural languages
- PgAdmin3 / Procedural languages
- php5-postgesql / Procedural languages
- Qcubed / Procedural languages
- Yii / Procedural languages
- Talend / Procedural languages
- BIRT / Procedural languages
- psycopg2 / Procedural languages
- postgresql.conf file
- about / Additional resources for C
- URL / Additional resources for C
- PostgreSQL back-end coding
- guidelines / Basic guidelines for writing C code
- PostgreSQL Extension Network
- URL / When to create an extension, Introduction to the PostgreSQL Extension Network
- about / Introduction to the PostgreSQL Extension Network
- PostgreSQL functions
- C function, SPI used / Sample C function using SPI
- data changes, visibility / Visibility of data changes
- SPI_* functions / More info on SPI_* functions
- PostgreSQL internals
- URL / Additional resources for C
- PostgreSQL license
- URL / Publishing your extension
- PostgreSQL server
- server programming / Why program in the server?
- code examples / About this book's code examples
- data management, with triggers / Managing related data with triggers
- auditing, changes / Auditing changes
- data cleaning / Data cleaning
- custom sort orders / Custom sort orders
- caching / On caching
- predictability / Predictability
- prepare() method / Functions returning a record
- procedural languages
- platform compatibility / Platform compatibility
- application design / Application design
- psql command line client / Transactions
- psycopg2 / Procedural languages
- public symbol names / Public symbol names
- Python
- atomicity / Atomicity in Python
- Python Database API Specification v2.0 / Running queries in the database
- Python Imaging Library (PIL) / Generating thumbnails when saving images
Q
- Qcubed / Procedural languages
- queries
- running, in database / Running queries in the database
- simple queries, running / Running simple queries
- prepared queries, using / Using prepared queries
- prepared queries, caching / Caching prepared queries
- constructing / Constructing queries
- running / Running queries and calling PostgreSQL functions
- query results
- looping / Looping through query results
R
- RAISE command / Throwing exceptions
- RAISE NOTICE
- debugging, manual / ''Manual'' debugging with RAISE NOTICE
- advantages / Advantages of RAISE NOTICE
- about / Advantages of RAISE NOTICE
- disadvantages / Disadvantages of RAISE NOTICE
- RAISE statement
- syntax, URL / Advantages of RAISE NOTICE
- range / Table functions
- Read Committed / Transactions
- record
- returning / Returning a record, Returning records
- record, handling
- as arguments / Handling records as arguments or returned values
- as returned values / Handling records as arguments or returned values
- single record, returning / Returning a single tuple of a complex type
- fields, extracting from argument tuple / Extracting fields from an argument tuple
- return tuple, constructing / Constructing a return tuple
- Datum / Interlude – what is Datum
- record sets, returning / Returning a set of records
- record sets
- returning / Returning a set of records
- refcursor / Returning cursors
- replication
- Master-slave replication / Master-slave replication – moving reads to slave
- Multi-master replication / Multimaster replication
- RETURN function / Returning a set of integers
- RETURN SETOF variants
- SETOF <type> / Summary of RETURN SETOF variants
- SETOF <table/view> / Summary of RETURN SETOF variants
- SETOF RECORD / Summary of RETURN SETOF variants
- TABLE (...) / Summary of RETURN SETOF variants
- RETURNS TABLE
- using / Using RETURNS TABLE
- RETURNS TABLE(...) function / Using RETURNS TABLE
- RETURN statement / Returning a set of integers
- reversed_vowels(word) / Custom sort orders
- rollback
- about / Doing something at commit/rollback
- ROLLBACK command / A log trigger
- running_queries(int, int) function / Functions based on views
- RUN ON ALL function / CONNECT, CLUSTER, and RUN ON
- RUN ON ALL statement
- uses / CONNECT, CLUSTER, and RUN ON
- RUN ON ANY statement / CONNECT, CLUSTER, and RUN ON
- RUN ON function / Distribution of data
- RUN ON statement / CONNECT, CLUSTER, and RUN ON
S
- SAVEPOINT attributes / Handling exceptions
- SAVEPOINT foo; command / Handling exceptions
- Security Definer / More control
- Security Invoker / More control
- SELECT command
- versus PERFORM command / PERFORM versus SELECT
- SELECT statement / Looping through query results, SELECT and TARGET
- sequence object / Transactions
- server
- bigger server, moving to / Moving to a bigger server
- data, partitioning across multiple servers / Data partitioning across multiple servers
- server programming
- need for / Why program in the server?
- about / Why program in the server?
- integrity checks, PL/pgSQL used / Using PL/pgSQL for integrity checks
- acquisition cost / Cost of acquisition
- set-returning function
- using / Using a set-returning function
- rows, returning from function / Returning rows from a function
- SETOF <table/view>, RETURNS / Summary of RETURN SETOF variants
- SETOF <type>, RETURNS / Summary of RETURN SETOF variants
- SETOF ANY
- returning / Returning SETOF ANY
- SETOF RECORD, RETURNS / Summary of RETURN SETOF variants
- sets
- about / Sets and arrays
- returning / Returning sets
- of integers, returning / Returning a set of integers
- set_salary() function / Auditing changes
- simple queries
- running / Running simple queries
- single-server chat
- specifications / Simple single-server chat
- implementing / Simple single-server chat
- skytools
- URL / Fast capturing of database changes
- smtplib
- URL / Sending an e-mail
- SOA / SOA – service-oriented architecture
- sorting / Custom sort orders
- SPI
- about / Running queries and calling PostgreSQL functions
- used, for C function / Sample C function using SPI
- examples, URL / Visibility of data changes
- URL / More info on SPI_* functions
- SPI_*() functions / More info on SPI_* functions
- SPI_exec() function / Sample C function using SPI
- SPI_execute() / Visibility of data changes
- SPLIT statement
- array elements, distributing over multiple partitions / SPLIT – distributing array elements over several partitions
- spoiler alert / Predictability
- SQL/MED
- used, for configuring PL/Proxy cluster / Configuring PL/Proxy cluster using SQL/MED
- URL / Configuring PL/Proxy cluster using SQL/MED
- SQL injection / Functions returning a record
- SRF_FIRSTCALL_INIT() / Returning a set of records
- SRF_PERCALL_SETUP() / Returning a set of records
- SRF_RETURN_DONE() / Returning a set of records
- STABLE function / Visibility
- STRICT keyword / Smart handling of NULL arguments
- structured data
- sets / Sets and arrays
- arrays / Sets and arrays
- sets, returning / Returning sets
- set-returning function, using / Using a set-returning function
- function, views based / Functions based on views
- OUT parameters / OUT parameters and records
- records / OUT parameters and records
- RETURN SETOF variants / Summary of RETURN SETOF variants
- cursors, returning / Returning cursors
- complex data types / Complex data types for modern world – XML and JSON
- XML data type / XML data type and returning data as XML from functions
- structured data, returning
- XML, from functions / XML data type and returning data as XML from functions
- structures
- zero-filling / Zero-fill the structures
- superuser / Advantages of the debugger
- sys.stderr
- redirecting / Redirecting sys.stdout and sys.stderr
- sys.stdout
- redirecting / Redirecting sys.stdout and sys.stderr
T
- TABLE (...), RETURNS / Summary of RETURN SETOF variants
- tables
- splitting, over multiple databases / Dealing with success – splitting tables over multiple databases
- table_ to_xml() function / XML data type and returning data as XML from functions
- Talend / Procedural languages
- TARGET statement / SELECT and TARGET
- TD
- about / Writing trigger functions in PL/Python
- [*event*] key / Writing trigger functions in PL/Python
- [*when*] key / Writing trigger functions in PL/Python
- [*level*] key / Writing trigger functions in PL/Python
- [*old*] key / Writing trigger functions in PL/Python
- [*new*] key / Writing trigger functions in PL/Python
- [*name*] key / Writing trigger functions in PL/Python
- [*table_name*] key / Writing trigger functions in PL/Python
- [*table_schema*] key / Writing trigger functions in PL/Python
- [*relid*] key / Writing trigger functions in PL/Python
- [*args*] key / Writing trigger functions in PL/Python
- TD[*args*] key / Writing trigger functions in PL/Python
- TD[*event*] key / Writing trigger functions in PL/Python
- TD[*level*] key / Writing trigger functions in PL/Python
- TD[*name*] key / Writing trigger functions in PL/Python
- TD[*new*] key / Writing trigger functions in PL/Python
- TD[*old*] key / Writing trigger functions in PL/Python
- TD[*relid*] key / Writing trigger functions in PL/Python
- TD[*table_name*] key / Writing trigger functions in PL/Python
- TD[*table_schema*] key / Writing trigger functions in PL/Python
- TD[*when*] key / Writing trigger functions in PL/Python
- text_to_cstring(<textarg>) function / Sample C function using SPI
- TG_ARGV / Creating the trigger
- TG_LEVEL variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_NAME variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_NARGS, TG_ARGV[] variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_OP variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_RELID variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_TABLE_NAME variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_TABLE_SCHEMA variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_WHEN variable / Variables passed to the PL/pgSQL TRIGGER function
- third-party tools / Procedural languages
- thumbnails
- generating, images saved / Generating thumbnails when saving images
- tinyint data type / Installing an extension from PGXN
- transaction isolation methods
- URL / Transactions
- transactions / Transactions
- trigger
- creating / Creating the trigger
- simple trigger, creating / Simple "Hey, I'm called" trigger
- audit trigger / The audit trigger
- logging / The audit trigger, A log trigger
- DELETE, disallowing / Disallowing DELETE
- TRUNCATE, disallowing / Disallowing TRUNCATE
- NEW record, modifying / Modifying the NEW record
- timestamping / Timestamping trigger
- immutable fields trigger / Immutable fields trigger
- firing, controlling / Controlling when a trigger is called
- using / And most importantly – use triggers cautiously!
- trigger, controlling
- conditional trigger / Conditional trigger
- on specific field changes / Trigger on specific field changes
- TRIGGER function / Managing related data with triggers
- trigger function
- creating / Creating the trigger function
- visibility / Visibility
- trigger function, PL/pgSQL
- OLD, NEW variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_NAME variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_WHEN variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_LEVEL variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_OP variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_RELID variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_TABLE_NAME variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_TABLE_SCHEMA variable / Variables passed to the PL/pgSQL TRIGGER function
- TG_NARGS, TG_ARGV[] variable / Variables passed to the PL/pgSQL TRIGGER function
- trigger functions
- writing, in PL/Python / Writing trigger functions in PL/Python
- inputs, exploring / Exploring the inputs of a trigger
- log trigger / A log trigger
- triggers
- data, managing / Managing related data with triggers
- TRUNCATE command / Simple "Hey, I'm called" trigger
- TRUNCATE trigger
- disallowing / Disallowing TRUNCATE
- trusted
- about / Are untrusted languages inferior to trusted ones?
- trusted languages
- and untrusted languages, comparing / Are untrusted languages inferior to trusted ones?
- type extensibility / Type extensibility
U
- UDF / User-defined functions (UDF)
- udp log type / A log trigger
- unknown return structure / Returning with no predefined structure
- unnest() function / Returning SETOF ANY
- untrusted languages
- and trusted languages, comparing / Are untrusted languages inferior to trusted ones?
- database, corrupting / Will untrusted languages corrupt the database?
- uses / Why untrusted?
- UPDATE trigger / Modifying the NEW record
- usagestamp() function / Immutable fields trigger
V
- variable parameters
- URL / User-defined functions (UDF)
- variadic argument lists / Variadic argument lists
- Version 0 Calling Conventions / Version 0 call conventions
- Version 0, C function
- URL / Version 0 call conventions
- visibility
- URL / Visibility
- visibility rules
- URL / Visibility of data changes
- VOLATILE function
- rules / Visibility
W
- WARNING / "Error" states that are not errors
X
- XML
- data, returning from functions / XML data type and returning data as XML from functions
- XML data type
- functions, URL / XML data type and returning data as XML from functions
Y
- YAGNI / YAGNI – you ain't gonna need it
- yield keyword / Returning a set of records
- Yii / Procedural languages