December 29, 2014
On Sunday, 28 December 2014 at 08:41:15 UTC, Suliman wrote:
> import postgres;
> import database;

Those should include the package name:

import arsd.postgres;

Since it publicly imports the base clas, you don't need to import database yourself. (You do still need to pass all files to dmd though, your command line should remain the same.

> and getting next error:

Those are protection errors because the package name isn't right, fix that and it should work (assuming you haven't modified the other source files)

> Also I can't understand why I do not need specify login and pass when I connection to DB?

Postgresql authenticates based on what operating system user you're logged in as. You can change that in the server settings but normally the default works well.
March 21, 2018
On Wednesday, 24 December 2014 at 11:56:40 UTC, Suliman wrote:
> Could anybody provide any simple examples of usage DerelictPQ. I do not have experience of C, and I can't understand how to use this driver.
>
> I need just basics like connect, select and insert.
>
> http://code.dlang.org/packages/derelict-pq
>
> thanks!


A bit late, but maybe useful for others, and googling 'dlang derelict postgres example' brings you here..

The default ubuntu (16.04) postgres version caused runtime errors for me (DerelictPQ.load()), what worked was installation from here:
https://www.postgresql.org/download/linux/ubuntu/

the example expects a postgres user/role 'sammy' with password 'sammypw' and a database 'sammy' with a table as shown in comments and set up as here:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-16-04

if you don't specify a host at PQconnectdb() then you might get an error
'Peer authentication failed for user "sammy"'
when you run the binary as a OS user different from 'sammy', or you would have to run the program as the postgres user like
sudo -iu sammy /path/to/prog

---- dub.json
{
	"name": "prog",
	"targetType": "executable",
	"sourceFiles": [ "prog.d" ],
	"dependencies": {
		"derelict-pq": "~>2.2.0"
	}
}

---- prog.d
import core.stdc.stdlib;
import std.stdio;
import std.conv;
import derelict.pq.pq;

/*
	CREATE TABLE playground (
	    equip_id serial PRIMARY KEY,
	    type varchar (50) NOT NULL,
	    color varchar (25) NOT NULL,
	    location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
	    install_date date
	);
	
	INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2014-04-28');
	INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2010-08-16');

 */

int main(string[] args)
{
	int retval = EXIT_SUCCESS;

	DerelictPQ.load();

	PGconn* conn = PQconnectdb("user = 'sammy' password = 'sammypw' dbname = 'sammy' host = '127.0.0.1'");
	if (PQstatus(conn) != CONNECTION_OK)
	{
		writefln("ERROR (connection): %s", to!string(PQerrorMessage(conn)));
		retval = EXIT_FAILURE;
	}
	else
	{
		writeln("OK (connection)");

		PGresult* result = PQexec(conn, "select * from playground");
		if (PQresultStatus(result) != PGRES_TUPLES_OK)
		{
			writefln("ERROR (result): %s", to!string(PQerrorMessage(conn)));
			retval = EXIT_FAILURE;

		}
		else
		{
			writeln("OK (result)");

			int nbFields = PQnfields(result);
			writeln("nbFields: ", nbFields);

			int nbRows = PQntuples(result);
			writeln("nbRows: ", nbRows);

			for (int f; f < nbFields; f++)
			{
				writef("%16s", to!string(PQfname(result, f)));
			}
			writeln("");

			for (int r; r < nbRows; r++)
			{
				for (int f; f < nbFields; f++)
				{
					ubyte* ub = cast(ubyte*)(PQgetvalue(result, r, f));
					int len = PQgetlength(result, r, f);
					char[] c = cast(char[])ub[0..len];
					string s = to!string(c);
					writef("%16s", s);
				}
				writeln("");
			}
		}
		PQclear(result);
	}
	PQfinish(conn);

	return retval;
}

----

If someone has a better way to convert the PQgetvalue() to string, i'm interested :)
The functions are as follows:
    alias da_PQgetvalue = const(ubyte)* function(const(PGresult)*,int,int);
    alias da_PQgetlength = int function(const(PGresult)*,int,int);

have a nice day
1 2
Next ›   Last »