Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/dennwc/go-fdw
- Owner: dennwc
- License: mit
- Created: 2017-05-21T18:08:55.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2019-01-07T17:24:01.000Z (about 6 years ago)
- Last Synced: 2024-10-14T12:11:43.652Z (3 months ago)
- Topics: fdw, golang, postgresql
- Language: Go
- Size: 17.6 KB
- Stars: 35
- Watchers: 5
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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 optionsContributions 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).