diff --git a/pg/pg-tests.ts b/pg/pg-tests.ts
new file mode 100644
index 0000000000..dd9c75378d
--- /dev/null
+++ b/pg/pg-tests.ts
@@ -0,0 +1,36 @@
+///
+import pg = require("pg");
+var conString = "postgres://username:password@localhost/database";
+
+// Client pooling
+pg.connect(conString, (err, client, done) => {
+ if (err) {
+ return console.error("Error fetching client from pool", err);
+ }
+ client.query("SELECT $1::int AS number", ["1"], (err, result) => {
+ done();
+ if (err) {
+ return console.error("Error running query", err);
+ }
+ console.log(result.rows[0]["number"]);
+ return null;
+ });
+ return null;
+});
+
+// Simple
+var client = new pg.Client(conString);
+client.connect((err) => {
+ if (err) {
+ return console.error("Could not connect to postgres", err);
+ }
+ client.query("SELECT NOW() AS 'theTime'", (err, result) => {
+ if (err) {
+ return console.error("Error running query", err);
+ }
+ console.log(result.rows[0]["theTime"]);
+ client.end();
+ return null;
+ });
+ return null;
+});
\ No newline at end of file
diff --git a/pg/pg.d.ts b/pg/pg.d.ts
new file mode 100644
index 0000000000..efdda0e4a4
--- /dev/null
+++ b/pg/pg.d.ts
@@ -0,0 +1,88 @@
+// Type definitions for pg
+// Project: https://github.com/brianc/node-postgres
+// Definitions by: Phips Peter
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module "pg" {
+ import events = require("events");
+ import stream = require("stream");
+
+ export function connect(connection: string, callback: (err: Error, client: Client, done: () => void) => void): void;
+ export function connect(config: ClientConfig, callback: (err: Error, client: Client, done: () => void) => void): void;
+ export function end(): void;
+
+ export interface ConnectionConfig {
+ user?: string;
+ database?: string;
+ password?: string;
+ port?: number;
+ host?: string;
+ }
+
+ export interface Defaults extends ConnectionConfig {
+ poolSize?: number;
+ poolIdleTimeout?: number;
+ reapIntervalMillis?: number;
+ binary?: boolean;
+ parseInt8?: boolean;
+ }
+
+ export interface ClientConfig extends ConnectionConfig {
+ ssl?: boolean;
+ }
+
+ export interface QueryConfig {
+ name?: string;
+ text: string;
+ values?: any[];
+ }
+
+ export interface QueryResult {
+ rows: any[];
+ }
+
+ export interface ResultBuilder extends QueryResult {
+ command: string;
+ rowCount: number;
+ oid: number;
+ addRow(row: any): void;
+ }
+
+ export class Client extends events.EventEmitter {
+ constructor(connection: string);
+ constructor(config: ClientConfig);
+
+ connect(callback?: (err:Error) => void): void;
+ end(): void;
+
+ query(queryText: string, callback?: (err: Error, result: QueryResult) => void): Query;
+ query(config: QueryConfig, callback?: (err: Error, result: QueryResult) => void): Query;
+ query(queryText: string, values: any[], callback?: (err: Error, result: QueryResult) => void): Query;
+
+ copyFrom(queryText: string): stream.Writable;
+ copyTo(queryText: string): stream.Readable;
+
+ pauseDrain(): void;
+ resumeDrain(): void;
+
+ public on(event: "drain", listener: () => void): Client;
+ public on(event: "error", listener: (err: Error) => void): Client;
+ public on(event: "notification", listener: (message: any) => void): Client;
+ public on(event: "notice", listener: (message: any) => void): Client;
+ public on(event: string, listener: Function): Client;
+ }
+
+ export class Query extends events.EventEmitter {
+ public on(event: "row", listener: (row: any, result?: ResultBuilder) => void): Query;
+ public on(event: "error", listener: (err: Error) => void): Query;
+ public on(event: "end", listener: (result: ResultBuilder) => void): Query;
+ public on(event: string, listener: Function): Query;
+ }
+
+ export class Events extends events.EventEmitter {
+ public on(event: "error", listener: (err: Error, client: Client) => void): Events;
+ public on(event: string, listener: Function): Events;
+ }
+}
\ No newline at end of file