Expand README.md
This commit is contained in:
parent
151fbaf691
commit
53789ec067
96
README.md
96
README.md
|
@ -1,3 +1,99 @@
|
|||
`uri` type for PostgreSQL
|
||||
=========================
|
||||
|
||||
https://twitter.com/pvh/status/567395527357001728
|
||||
|
||||
This is an extension for PostgreSQL that provides a `uri` data type.
|
||||
Advantages over using plain `text` for storing URIs include:
|
||||
|
||||
- URI syntax checking
|
||||
- functions for extracting URI components
|
||||
- human-friendly sorting
|
||||
|
||||
The actual URI parsing is provided by the
|
||||
[uriparser](http://uriparser.sourceforge.net/) library, which supports
|
||||
URI syntax as per [RFC 3986](http://tools.ietf.org/html/rfc3986).
|
||||
|
||||
Note that this might not be the right data type to use if you want to
|
||||
store user-provided URI data, such as HTTP referrers, since they might
|
||||
contain arbitrary junk.
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
You need to have the above-mentioned `uriparser` library installed.
|
||||
It is included in many operating system distributions and package
|
||||
management systems. `pkg-config` will be used to find it. I
|
||||
recommend at least version 0.8.0. Older versions will also work, but
|
||||
they apparently contain some bugs and might fail to correctly accept
|
||||
or reject URI syntax corner cases. This is mainly a problem if your
|
||||
application needs to be robust against junk input.
|
||||
|
||||
To build and install this module:
|
||||
|
||||
make
|
||||
make install
|
||||
|
||||
or selecting a specific PostgreSQL installation:
|
||||
|
||||
make PG_CONFIG=/some/where/bin/pg_config
|
||||
make PG_CONFIG=/some/where/bin/pg_config install
|
||||
|
||||
And finally inside the database:
|
||||
|
||||
CREATE EXTENSION uri;
|
||||
|
||||
Using
|
||||
-----
|
||||
|
||||
This module provides a data type `uri` that you can use like a normal
|
||||
type. For example:
|
||||
|
||||
```sql
|
||||
CREATE TABLE links (
|
||||
id int PRIMARY KEY,
|
||||
link uri
|
||||
);
|
||||
|
||||
INSERT INTO links VALUES (1, 'https://github.com/petere/pguri');
|
||||
```
|
||||
|
||||
A number of functions are provided to extract parts of a URI:
|
||||
|
||||
- `uri_scheme(uri) returns text`
|
||||
|
||||
Extracts the scheme of a URI, for example `http` or `ftp` or
|
||||
`mailto`.
|
||||
|
||||
- `uri_userinfo(uri) returns text`
|
||||
|
||||
Extracts the user info part of a URI. This is normally a user
|
||||
name, but could also be of the form `username:password`. If the
|
||||
URI does not contain a user info part, then this will return null.
|
||||
|
||||
- `uri_host(uri) returns text`
|
||||
|
||||
Extracts the host of a URI, for example `www.example.com` or
|
||||
`192.168.0.1`. (For IPv6 addresses, the brackets are not included
|
||||
here.) If there is no host, the return value is null.
|
||||
|
||||
- `uri_host_inet(uri) returns inet`
|
||||
|
||||
If the host is a raw IP address, then this will return it as an
|
||||
`inet` datum. Otherwise (not an IP address or no host at all),
|
||||
the return value is null.
|
||||
|
||||
- `uri_port(uri) returns integer`
|
||||
|
||||
Extracts the port of a URI as an integer, for example `5432`. If
|
||||
no port is specified, the return value is null.
|
||||
|
||||
- `uri_query(uri) returns text`
|
||||
|
||||
Extracts the query part of a URI (roughly speaking, everything
|
||||
after the `?`). If there is no query part, returns null.
|
||||
|
||||
- `uri_fragment(uri) returns text`
|
||||
|
||||
Extracts the fragment part of a URI (roughly speaking, everything
|
||||
after the `#`). If there is no fragment part, returns null.
|
||||
|
|
Loading…
Reference in New Issue