Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dennwc/go-fdw

Go project template for Foreign Data Wrappers for PostgreSQL
https://github.com/dennwc/go-fdw

fdw golang postgresql

Last synced: 3 months ago
JSON representation

Go project template for Foreign Data Wrappers for PostgreSQL

Awesome Lists containing this project

README

        

# Go FDW for PostgreSQL

An experimental Go project template for building PostgreSQL Foreign Data Wrappers (FDW).

Tested with PostgreSQL v9.6 and Go 1.8.1 on Ubuntu x64.

**Supports:**

* Table scan
* EXPLAIN
* Table options

Contributions are welcome!

## Getting started

Module entry point is defined in `fdw.go` file (see `SetTable`). This file contains a basic working example, so give it a try.
Later you will need to rewrite it to suit your needs.

### Build

The easiest way to build Postgres extension is to run `dennwc/go_fdw` Docker image:

```
docker run --rm -v $GOPATH:/gopath -v $PWD/fdw.go:/build/fdw.go -v $PWD/out:/out dennwc/go_fdw
```

This command will mount your `./fdw.go` and `GOPATH` to the container, build an extension and copy it to `./out` folder.

If you don't use Docker, check `Dockerfile` to see what commands are needed to manually setup your build environment.

### Install

To install an extension just copy it to your Postgres installation. At the end of the build process you'll see following lines:

```
/usr/bin/install -c -m 755 go_fdw.so '/usr/lib/postgresql/9.6/lib/go_fdw.so'
/usr/bin/install -c -m 644 .//go_fdw.control '/usr/share/postgresql/9.6/extension/'
/usr/bin/install -c -m 644 .//go_fdw--1.0.sql '/usr/share/postgresql/9.6/extension/'
```

You can execute the same commands to install an extension locally.

### Testing

Execute following SQL statements to load an extension:

```sql
-- should match an extension lib name
-- creates a "go-fdw" FDW server record automatically (see go_fdw--1.0.sql)
CREATE EXTENSION go_fdw;

-- create a foreign table for an extension
CREATE FOREIGN TABLE public.gotest (
id INTEGER NOT NULL,
name text NOT NULL
)
SERVER "go-fdw"
OPTIONS (foo 'bar');
```

And finally, run the query:

```sql
SELECT * FROM gotest;
```

**Note:** After extension is loaded, you'll need to restart Postgres to test any changes to the code.
Database will not reload shared library file automatically.

## Hacking

Project is under development and lacks few features, so feel free to send a PR or file an issue :)

An official documentation for FDW callbacks can be found [here](https://www.postgresql.org/docs/9.6/static/fdwhandler.html).
And the documentation for Postgres sources is [here](https://doxygen.postgresql.org).