Log of an installation of libexodus on Centos 5.3: Difference between revisions

From NEOSYS Dev Wiki
Jump to navigationJump to search
m (Reverted edits by Anecada (Talk) to last revision by Steve)
 
(39 intermediate revisions by 3 users not shown)
Line 1: Line 1:
=== Preparation ===
=== Preparation ===


  sudo su -
  sudo yum update
yum update
 
  yum install boost-devel postgresql-devel gcc-c++ subversion
  sudo yum install gcc-c++ boost-devel postgresql-devel postgresql-server
 
Centos needs you to start the database manually. Ubuntu doesnt.
 
sudo /etc/init.d/postgresql start


=== Exodus ===
=== Exodus ===


(pgexodus, which allows "sort/select/index by", isnt included in this quick install)
wget http://exodusdb.googlecode.com/files/exodus-10.10.5.tar.gz
tar xvfz exodus-10.10.5.tar.gz
cd exodus-10.10.5


  cd ~
  ./configure
mkdir exodus
  make && sudo make install
cd exodus
svn co http://svn.neosys.com/svn/trunk
  cd trunk/exodus/exodus


ln -s /usr/include /usr/include/postgresql
=== Setting up Postgres for Exodus ===


./configure
==== Register the pgexodus plugin ====
make
make install


nano /etc/ld.so.conf
Assume identity of a postgres superuser


... and add the following line (nb with no preceding word include)
  sudo su - postgres


/usr/local/lib
On Mac OSX only, ensure postgres can be found. Change 8.3 to your version) and check pg_config can run)


register the new libraries
PATH=/Library/PostgreSQL/8.3/bin/:$PATH
pg_config


/sbin/ldconfig
Log in to postgres as a postgres superuser and connect to database template1


make a pointer to the include files
psql -U postgres -d template1
\connect template1


ln -s /usr/local/include/exodus-9.6/exodus /usr/local/include/exodus
{{postgres function installation}}


=== Testing ===
Check the functions loaded properly (count them)


  nano tester.cpp
  \df exodus*


<pre>
<pre>
  #include <exodus/exodus.h>
                                                  List of functions
  int main() {
Schema |          Name          |      Result data type      |                Argument data types
date().oconv("D").outputln();
--------+-------------------------+-----------------------------+-----------------------------------------------------
print(oconv(date(),"D"));
  public | exodus_call            | bytea                      | bytea, bytea, bytea, bytea, bytea, integer, integer
  }
  public | exodus_extract_bytea    | bytea                      | bytea, integer, integer, integer
public | exodus_extract_date    | date                       | bytea, integer, integer, integer
public | exodus_extract_datetime | timestamp without time zone | bytea, integer, integer, integer
public | exodus_extract_sort    | text                        | bytea, integer, integer, integer
public | exodus_extract_text    | text                        | bytea, integer, integer, integer
public | exodus_extract_text2    | text                        | bytea, integer, integer, integer
  public | exodus_extract_time    | time without time zone      | bytea, integer, integer, integer
(8 rows)
</pre>
</pre>


g++ tester.cpp -lexodus-9.6 -I/usr/local/include/exodus
For more information see http://www.postgresql.org/docs/8.1/static/app-psql.html


  ./a.out
==== Create a user and database for exodus ====
 
Use the example password for now to avoid further configuration in exodus.
 
CREATE ROLE exodus LOGIN
  PASSWORD 'somesillysecret'
  CREATEDB CREATEROLE;
CREATE DATABASE exodus
  WITH ENCODING='UTF8'
    OWNER=exodus;
 
Quit postgres command prompt
 
\q
 
==== Ensure Exodus can logon to postgres ====
 
===== Edit pg_hba.conf =====
 
Unless you are only going to run Exodus as user "exodus" from the local machine, grant login from 127.0.0.1 using username/encrypted password (instead of only "ident sameuser" which means the logged-in username without password) For more info see http://developer.postgresql.org/pgdocs/postgres/auth-pg-hba-conf.html
 
Redhat/Centos/MacOSX
  nano ~/data/pg_hba.conf
or for Ubuntu
nano /etc/postgresql/8.3/main/pg_hba.conf
 
Allow any postgres user to login with a password via interprocess tcp/ip.
 
comment out the following line.
 
#host    all        all        127.0.0.1/32          ident sameuser
 
and add the following:
 
host    all        all        127.0.0.1/32          md5
 
quit postgres user
 
exit
 
Reload Postgres
 
Redhat/Centos
sudo /etc/init.d/postgresql reload
or Ubuntu
sudo /etc/init.d/postgresql-8.3 reload
or MacOSX
sudo su postgres
/Library/PostgreSQL/8.3/bin/pg_ctl reload -D /Library/PostgreSQL/8.3/data
exit
 
=== Testing ===


27 JUN 2009
{{exodus console first steps}}
27 JUN 2009

Latest revision as of 14:01, 24 November 2010

Preparation

sudo yum update
sudo yum install gcc-c++ boost-devel postgresql-devel postgresql-server

Centos needs you to start the database manually. Ubuntu doesnt.

sudo /etc/init.d/postgresql start

Exodus

wget http://exodusdb.googlecode.com/files/exodus-10.10.5.tar.gz
tar xvfz exodus-10.10.5.tar.gz
cd exodus-10.10.5
./configure
make && sudo make install

Setting up Postgres for Exodus

Register the pgexodus plugin

Assume identity of a postgres superuser

sudo su - postgres

On Mac OSX only, ensure postgres can be found. Change 8.3 to your version) and check pg_config can run)

PATH=/Library/PostgreSQL/8.3/bin/:$PATH
pg_config

Log in to postgres as a postgres superuser and connect to database template1

psql -U postgres -d template1
\connect template1


-- cut and paste the following SQL to register the functions into postgres --

CREATE OR REPLACE FUNCTION exodus_call(bytea, bytea, bytea, bytea, bytea, int4, int4) RETURNS bytea AS 'pgexodus', 'exodus_call' LANGUAGE C IMMUTABLE;

CREATE OR REPLACE FUNCTION exodus_extract_bytea(bytea, int4, int4, int4) RETURNS bytea AS 'pgexodus', 'exodus_extract_bytea' LANGUAGE C IMMUTABLE;

CREATE OR REPLACE FUNCTION exodus_extract_text(bytea, int4, int4, int4) RETURNS text AS 'pgexodus', 'exodus_extract_text' LANGUAGE C IMMUTABLE;

CREATE OR REPLACE FUNCTION exodus_extract_sort(bytea, int4, int4, int4) RETURNS text AS 'pgexodus', 'exodus_extract_sort' LANGUAGE C IMMUTABLE;

-- Remaining functions are STRICT therefore never get called with NULLS -- also return NULL if passed zero length strings

CREATE OR REPLACE FUNCTION exodus_extract_text2(bytea, int4, int4, int4) RETURNS text AS 'pgexodus', 'exodus_extract_text2' LANGUAGE C IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION exodus_extract_date(bytea, int4, int4, int4) RETURNS date AS 'pgexodus', 'exodus_extract_date' LANGUAGE C IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION exodus_extract_time(bytea, int4, int4, int4) RETURNS time AS 'pgexodus', 'exodus_extract_time' LANGUAGE C IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION exodus_extract_datetime(bytea, int4, int4, int4) RETURNS timestamp AS 'pgexodus', 'exodus_extract_datetime' LANGUAGE C IMMUTABLE STRICT;

Check the functions loaded properly (count them)

\df exodus*
                                                  List of functions
 Schema |          Name           |      Result data type       |                 Argument data types
--------+-------------------------+-----------------------------+-----------------------------------------------------
 public | exodus_call             | bytea                       | bytea, bytea, bytea, bytea, bytea, integer, integer
 public | exodus_extract_bytea    | bytea                       | bytea, integer, integer, integer
 public | exodus_extract_date     | date                        | bytea, integer, integer, integer
 public | exodus_extract_datetime | timestamp without time zone | bytea, integer, integer, integer
 public | exodus_extract_sort     | text                        | bytea, integer, integer, integer
 public | exodus_extract_text     | text                        | bytea, integer, integer, integer
 public | exodus_extract_text2    | text                        | bytea, integer, integer, integer
 public | exodus_extract_time     | time without time zone      | bytea, integer, integer, integer
(8 rows)

For more information see http://www.postgresql.org/docs/8.1/static/app-psql.html

Create a user and database for exodus

Use the example password for now to avoid further configuration in exodus.

CREATE ROLE exodus LOGIN
 PASSWORD 'somesillysecret'
 CREATEDB CREATEROLE;
CREATE DATABASE exodus
 WITH ENCODING='UTF8'
   OWNER=exodus;

Quit postgres command prompt

\q

Ensure Exodus can logon to postgres

Edit pg_hba.conf

Unless you are only going to run Exodus as user "exodus" from the local machine, grant login from 127.0.0.1 using username/encrypted password (instead of only "ident sameuser" which means the logged-in username without password) For more info see http://developer.postgresql.org/pgdocs/postgres/auth-pg-hba-conf.html

Redhat/Centos/MacOSX

nano ~/data/pg_hba.conf

or for Ubuntu

nano /etc/postgresql/8.3/main/pg_hba.conf

Allow any postgres user to login with a password via interprocess tcp/ip.

comment out the following line.

#host    all         all         127.0.0.1/32          ident sameuser

and add the following:

host    all         all         127.0.0.1/32           md5

quit postgres user

exit

Reload Postgres

Redhat/Centos

sudo /etc/init.d/postgresql reload

or Ubuntu

sudo /etc/init.d/postgresql-8.3 reload

or MacOSX

sudo su postgres
/Library/PostgreSQL/8.3/bin/pg_ctl reload -D /Library/PostgreSQL/8.3/data
exit

Testing

Try the following commands.

Command Comment
EDITING AND COMPILING
edic hello edic=edit+compile+catalog. Creates a skeleton hello.cpp file using nano editor. edic will only compile on exit if saved, so make some change before you exit.
hello Run it
compile hello compile without editing
edic testsort Browse a sample exodus program showing all fundamental database operations including dictionaries and list.
compile testsort compile the preinstalled test program
testsort Run it to generate some data and inspect the output
DATABASE OPERATIONS
listfiles quick tool avoiding need to use any database client
list myclients text output - no page/column headers just yet sorry
list myclients {H} html output (port of a fully blown LIST replacement in heavy production use since 2000)
list dict_myclients NB the underscore after "dict" is *required*. "dict(SPACE)myclients" wont work
list dict_voc if you understand this then you understand your pick
edir myclients SB001 you can edit data or dictionaries directly. edir="edit record"
delete myclients SB001 useful command line tool
createfile tempfile ditto
deletefile tempfile ditto
createindex myclients CLIENT_TYPE speeds up select commands on the indexed fields in the traditional way
deleteindex myclients CLIENT_TYPE filenames are case insensitive, keys and fieldnames are CASE SENSITIVE

If you get the following error then you have not completed the installation of the Exodus plugin for Postgres.

PGRES_FATAL_ERROR: ERROR: function exodus_extract_text(bytea, integer, integer, integer) does not exist