Update on 25/Jun/2015
|
We have added the links to the compiled deb packages. Skip to this section if you only want to download and install them. |
This article is an updated version of our previous post where we explained how to install PostgreSQL on the Raspberry Pi.
Many exciting things have happened since then, but the main ones are that PostgreSQL is now at version 9.4 with plenty of improvements and, finally, a new model of our beloved credit-card-sized computer, the Raspberry Pi 2, was released.
Now, let’s cut to the chase and start installing PostgreSQL on it. Just to make things easier, the whole procedure listed here is supposed to work on both models of the Raspberry Pi (1 and 2).
Two alternatives
The first thing you have to do is choose which version of PostgreSQL to install and this is pretty straight forward: to compile or not to compile.
Why?
Well, on the current Raspbian Linux release (2015-05-05), which is the distribution recommended by the Raspberry Pi Foundation and the one we are using for this process, the only PostgreSQL present on the Raspbian repository is the version 9.1. If you dont mind about using a previous version, you can install it as you install any other Debian package through apt-get.
But, if you want the latest version of PostgreSQL, which is the 9.4 at the time we are writing this, you have to downloaded it from the PostgreSQL Apt Repository and compile it. Don’t worry, this sounds harder than it actually is and we have you covered.
To help you decide, the recommended PostgreSQL version to be used is always the latest, due to various improvements and new features included in every new release.
The installation details of both options are listed below:
PostgreSQL 9.1 from the Raspbian repository
Go to the terminal and type the command:
sudo apt-get install postgresql-9.1
That’s it. No, seriously, you are done! But then, what was the fun on that?
PostgreSQL 9.4 from the PostgreSQL Apt Repository
As the previous method, open a terminal and type the following commands. You can also copy-and-paste it to avoid any typing mistakes.
- Add the PostgreSQL Apt Repository (source)
echo "deb-src http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
- Import the repository signing key
wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
- Update the package list and upgrade the system
sudo apt-get update
sudo apt-get upgrade
- Install necessary tools
sudo apt-get install build-essential fakeroot
- Install all the dependencies needed
sudo apt-get build-dep postgresql-9.4
sudo apt-get build-dep postgresql-common
sudo apt-get build-dep postgresql-client-common
sudo apt-get build-dep pgdg-keyring
-
Compile packages
IMPORTANT
Do not run the compilation as root. The second line, which compiles postgresql-9.4, will take a long time to finish, so, it is recommended to use a remote session with screen or tmux. If you don’t know how to use them, just repeat the instruction in case any disconnection happens.
cd /tmp
apt-get source --compile postgresql-9.4
apt-get source --compile postgresql-common
apt-get source --compile postgresql-client-common
apt-get source --compile pgdg-keyring
- Create local repository
sudo mkdir /var/local/repository
echo "deb [ trusted=yes ] file:///var/local/repository ./" | sudo tee /etc/apt/sources.list.d/my_own_repo.list
cd /var/local/repository
sudo mv /tmp/*.deb .
dpkg-scanpackages ./ | sudo tee Packages > /dev/null && sudo gzip -f Packages
- Update package list
sudo apt-get update
- Finally, PostgreSQL-9.4 can be installed
sudo apt-get install postgresql-9.4
Feeling good? It was not that hard, was it? Now you have the latest version of the world’s most advanced open source database installed and ready to fly on your Raspberry Pi.
Download the deb packages
Ok, now that you know how to compile PostgreSQL and install it by yourself, I can show you a shortcut. Don’t get me wrong, the knowledge you have acquired compiling PostgreSQL by hand is well worth, but if you don’t want to wait for the compilation to finish, we have already compiled the packages for you and uploaded them to our Dropbox folder.
Just to be clear, if you want to download our compiled packages, you don’t have to follow any of the instructions explained on the previous sections. Could I have told you this before? Yes, of course I could, but then you wouldn’t have learned how to compile PostgreSQL, would you?
You just have to type the following in the terminal:
sudo mkdir /var/local/repository
cd /var/local/repository
sudo wget -O postgresql-9.4.4-raspbian.tgz https://www.dropbox.com/s/t9x78hbfo2mb8yi/postgresql-9.4.4-raspbian.tgz?dl=1
sudo tar -xvzf postgresql-9.4.4-raspbian.tgz
echo "deb [ trusted=yes ] file:///var/local/repository ./" | sudo tee /etc/apt/sources.list.d/my_own_repo.list
sudo apt-get update
sudo apt-get install postgresql-9.4
Done! We will update the Dropbox link on future PostgreSQL releases.
Independently of which method you choose, during the installation the user “postgres” is created with its home directory located in /var/lib/postgresql/. Usually on Raspbian Linux (the same for Debian and Ubuntu) PostgreSQL configuration files are stored in /etc/postgresql/9.4/main/, and data directory is stored in /usr/local/var/postgres/. Now it is possible to start/stop/restart the postmaster (the main process of a PostgreSQL server) using the command:
sudo service postgresql start|stop|restart
While tweaking the configuration file parameters, keep in mind that most of the changes should require a postmaster restart.
Thanks for all your comments and questions sent on the previous article. We hope this updated version solves the problems you were having to install PostgreSQL and, if it doesn’t, feel free to comment and send new questions here as well.
Last updated 2015-06-17 13:49:42 CEST
Pingback: Step 5: installing PostgreSQL on my Raspberry PI | Raspberry PG
Thanks for a great guide and keeping it up to date!
I ran into a small hiccup trying to use the dropbox download option.
Apparently Dropbox has added a popup window at the default download link when sharing.
Solution was to change the end of the link to “dl=1″
I.e.
sudo wget -O postgresql-9.4.4-raspbian.tgz https://www.dropbox.com/s/t9x78hbfo2mb8yi/postgresql-9.4.4-raspbian.tgz?dl=1
Thanks Cansher for the comment.
I’ve just changed the Dropbox download link. The funny thing is that both links have worked for me.
Thanks! Nice repo, using it for my Banana Pi
Glad we could help, Stezi and thanks for the feedback on the Banana Pi.
Did you compiled the packages as root? Or created a non root user?
Hi, Regis. The compilation has to be done with the normal user pi. On step 6 of the instructions above there is a warning asking: “Do not run the compilation as root.”. Also, there is no reason to create another user, as the user pi is automatically created when you install Raspbian. If you want you can create another user, of course, as in any other Linux distribution, but there is no need, as everything can be done with the pi user. The steps where root is needed are initiated with the sudo command.
I’ve used the same instructions listed above to compile the packages that were uploaded to Dropbox.
Tell me if you are having any problems to install the packages.
Thanks so much for putting 9.4 on dropbox! btw I had to tar -xvzf
You are welcome, Mark. And we will compile on the Raspberry Pi the new PostgreSQL version (9.5) when it’s released and put on Dropbox as well, so stay tuned!
About the need of doing
tar -xvzf
on the file downloaded from Dropbox, it is a needed step because the .tgz file you downloaded is where all the compiled packages are compressed in, so you have to decompress it using tar. It is one of the steps listed on the procedures above, so no problems there.Hi there,
Thanks for this tut. Was wondering when you were planning to put a compile for postgres 9.5 now that it’s released!
Would be very helpful!
We are preparing a new post about upgrading to PostgreSQL 9.5. Meanwhile, if you want to compile the new postgres release, the same procedure listed on this blog works. You just have to change every “postgresql-9.4″ to “postgresql-9.5″ instead. And if you are using jessie instead of wheezy, change “wheezy-pgdg” to “jessie-pgdg”. Doing these changes, the compilation should work just fine.
Thanks so much for your work! What is the latest with 9.5? I tried the download changing 9.4.4 to 9.5, but “had issues”. This is on a pi3
Sorry I was’t clear. I had to put the minus sign before the xzvf, the instructions didn’t have it
Oh, Mark, now I see it. I usually don’t use the dash (-) on tar command, but it is supposed to work either way. The reason for sometimes use or not use the dash (-) is historical. In this post there is a good explanation: Unix & Linux Stack Exchange
I’ve changed the post and included the dash to avoid any other problems. Thanks again for pointing that out.
Thanks for the dropbox compiled release !
When i tried to follow the first part of your guide ( i would like to use 9.4) i raised an error and the installation failed
Hi. Ric. In which step did the error occur? What was the error? Did it give any error message? Give some details about what happened and we can sort it out.
Do you want to compile the packages yourself and are following the “PostgreSQL 9.4 from the PostgreSQL Apt Repository” steps or you just want to install PostgreSQL 9.4 and are trying to download the deb packages from Dropbox? If you just want to install PostgreSQL without having to compile it, following the instructions to install it using the packages on Dropbox is a lot faster.
Suggestions? Using deb packages. All prior steps performed successfully. Last step for installation fails on dependencies.
rammjet@raspberrypi2:/var/local/repository$ sudo apt-get install postgresql-9.4
Reading package lists… Done
Building dependency tree
Reading state information… Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
postgresql-9.4 : Depends: postgresql-client-9.4 but it is not going to be installed
Depends: postgresql-common (>= 142~) but 134wheezy4 is to be installed
Recommends: postgresql-contrib-9.4 but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
rammjet@raspberrypi2:/var/local/repository$
For what I understood you have downloaded the packages from the Dropbox folder. Did you execute in order all the steps listed? Have you updated the system (
sudo apt-get update
) before trying to install PostgreSQL?If yes, please list here the files you have under /var/local/repository with “
ls /var/local/repository/
” and also what you have inside the /etc/apt/sources.list.d/my_own_repo.list file with “cat /etc/apt/sources.list.d/my_own_repo.list
“.Yes, as I said: “Using deb packages. All prior steps performed successfully.” including sudo apt-get update.
rammjet@raspberrypi2:/var/local/repository$ ls -1 /var/local/repository
libecpg6_9.4.4-1.pgdg70+1_armhf.deb
libecpg-compat3_9.4.4-1.pgdg70+1_armhf.deb
libecpg-dev_9.4.4-1.pgdg70+1_armhf.deb
libpgtypes3_9.4.4-1.pgdg70+1_armhf.deb
libpq5_9.4.4-1.pgdg70+1_armhf.deb
libpq-dev_9.4.4-1.pgdg70+1_armhf.deb
Packages.gz
pgdg-keyring_2014.1_all.deb
postgresql_9.4+169.pgdg70+1_all.deb
postgresql-9.4.4-raspbian.tgz
postgresql-9.4_9.4.4-1.pgdg70+1_armhf.deb
postgresql-9.4-dbg_9.4.4-1.pgdg70+1_armhf.deb
postgresql-client_9.4+169.pgdg70+1_all.deb
postgresql-client-9.4_9.4.4-1.pgdg70+1_armhf.deb
postgresql-client-common_169.pgdg70+1_all.deb
postgresql-common_169.pgdg70+1_all.deb
postgresql-contrib_9.4+169.pgdg70+1_all.deb
postgresql-contrib-9.4_9.4.4-1.pgdg70+1_armhf.deb
postgresql-doc_9.4+169.pgdg70+1_all.deb
postgresql-doc-9.4_9.4.4-1.pgdg70+1_all.deb
postgresql-plperl-9.4_9.4.4-1.pgdg70+1_armhf.deb
postgresql-plpython3-9.4_9.4.4-1.pgdg70+1_armhf.deb
postgresql-plpython-9.4_9.4.4-1.pgdg70+1_armhf.deb
postgresql-pltcl-9.4_9.4.4-1.pgdg70+1_armhf.deb
postgresql-server-dev-9.4_9.4.4-1.pgdg70+1_armhf.deb
postgresql-server-dev-all_169.pgdg70+1_all.deb
rammjet@raspberrypi2:/var/local/repository$ cat /etc/apt/sources.list.d/my_own_repo.list
deb [ trusted=yes ] file:///var/local/repository ./
Thanks.
OK, I got it now. I had a modified /etc/apt/sources.list and some other files in /etc/apt/sources.list.d/ from previous projects. Deleted the extraneous stuff and now it is working fine.
Thank you.
Congrats for sorting it out, rammjet! Now you can have fun with PostgreSQL!
Thanks for your feedback!
Very nice. Thanks.
Hi Rubens, thanks for the great support, works perfectly.
Maybe you can help with this last step. Everything’s working on my linux machine, created a database, added some tables. Everything’s ok so far.
But then I try to run a php website on my windows machine, the website opens, but I can’t access my postgres database.
“phpinfo();” tells me:
Configuration File (php.ini) Path /etc/php5/apache2
Loaded Configuration File /etc/php5/apache2/php.ini
Scan this dir for additional .ini files /etc/php5/apache2/conf.d
Additional .ini files parsed /etc/php5/apache2/conf.d/10-pdo.ini
PHP API 20100412
PHP Extension 20100525
PHP Extension Build API20100525,NTS
I’ve changed postgres.conf with: listen_addresses = ‘*’ (and restarted postgres server)
pg_hba.conf:
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
(and restarted postgres server)
‘netstat -na’ tells me:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
I don’t know which part is not working. Should I have edited the ‘./configure’ before compilation? And if so, what should that be?
If you can help me, would be great. (…I mean really great)
Congratulations Ed for successfully installing PostgreSQL. It’s nice that you are using it for your projects. Now, about connecting PHP to PostgreSQL, to allow remote connections into your database you have to basically do 3 things:
1. On postgres.conf set listen_addresses = ‘*’. You have already done this. Good.
2. On pg_hga.conf set from where the incoming connections will be accepted. As I don’t know your network settings, one way to solve this is accepting connections from anywhere, which would be like:
host all all 0.0.0.0/0 md5
The key point here is the 0.0.0.0/0 part, which allows any connection to be accepted. Because of this we also set the authentication method to md5, which will ask for a password for every connection made. You can find other options for setting pg_hba.conf here: http://www.postgresql.org/docs/9.4/static/auth-pg-hba-conf.html#EXAMPLE-PG-HBA.CONF
3. The last thing to do is just create a password for the postgres user. To do this login to your Raspberry Pi as the normal user pi and enter the following on the terminal:
sudo -iu postgres psql -c "\password postgres"
Type the new password for the postgres user and confirm it. Make sure you remember it. If you have created another user inside your database you have to create a password for it as well in case you want to connect with it.
I am planning to write another post about how to connect to PostgreSQL after installing it, but right now you can find these other posts helpful as well:
http://raspberrypg.org/2013/11/connecting-to-postgresql-on-raspberry-via-psql/
http://raspberrypg.org/2013/11/connecting-to-postgresql-on-raspberry-via-pgadminiii/
http://raspberrypg.org/2013/11/connecting-to-postgresql-on-raspberry-via-python/
You don’t have to change anything in ‘./configure’ before compilation. What happens is that PostgreSQL really takes security seriously and does not allow any remote connection right after is installed. In other words, only local connections are allowed, so any remote connection has to be set as we did above.
Let me know if this has worked out for you.
Hi Rubens,
Thanks for your reply. After a while I had to find out I didn’t install the correct library… (embarrassing smiley over here).
Unfortunately my Pi gave up, so I’m continuing Postgres on windows. Will make a clean start with the Pi later. Thanks again.
Ed
Hi, I followed the steps here, and have 9.3 installed: http://raspberrypg.org/2013/11/step-5-installing-postgresql-on-my-raspberry-pi/
How can I now upgrade to 9.4?
When I try the directions above I get this error… so now I am worried about having to uninstall 9.3 which was compiled from source… pls help…:
Setting up postgresql-9.4 (9.4.4-1.pgdg70+1) …
[....] Starting PostgreSQL 9.4 database server: main[....] The PostgreSQL server failed to start. Please check the log output: 2015-08-22 00:37:47 PDT [23944-1] LOG: could not bind IPv4 socket: Cannot assign requested address 2015-08-22 00:37:47 PDT [23944-2] HINT: Is another postmaster already running on port 5433? If not, wait a few seconds and retry. 2015-08-22 00:37:47 PDT [23944-3] LOG: could not create IPv6 socket: Address family not supported by protocol 2015-08-22 00:37:47 PDT [23944-4] WARNING: could not create listen socket for “localhost” 2015-08-22 00:[FAIL PDT [23944-5] FATAL: could not create any TCP/IP sockets … failed!
failed!
invoke-rc.d: initscript postgresql, action “start” failed.
dpkg: error processing postgresql-9.4 (–configure):
subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of postgresql-contrib-9.4:
postgresql-contrib-9.4 depends on postgresql-9.4 (= 9.4.4-1.pgdg70+1); however:
Package postgresql-9.4 is not configured yet.
dpkg: error processing postgresql-contrib-9.4 (–configure):
dependency problems – leaving unconfigured
Errors were encountered while processing:
postgresql-9.4
postgresql-contrib-9.4
E: Sub-process /usr/bin/dpkg returned an error code (1)
Hi John,
The instructions elaborated on this post, as well as on the first one, are indicated for new installs, not for upgrades. But, just to mention, on Raspbian and any other Debian derivative, it’s possible to have different PostgreSQL major versions installed and working side by side, as 9.3 and 9.4 in your case. Before continuing, you have to decide what you want to do:
- keep both major versions installed and working together
- upgrade to the new major version (9.4) and keep your data, in case you have important data to keep
If you don’t have any important data to keep and want to start a new database from zero, the easiest thing to do would be uninstall both PostgreSQL on your Raspberry Pi and redo the procedure listed on this post, making sure that all the files mentioned don’t have any extra information on them.
If you want to upgrade version keeping your existent data, there are mainly 3 ways of upgrading a PostgreSQL major version (e.g. 9.3 to 9.4). It is pretty straightforward, as long as the preparation and execution are followed in order, but the point is that Upgrading is a complete new blog post by itself, and if I elaborate the procedure here it will, probably, generate more questions from users here on the comments, which doesn’t have a good layout to answer many questions. I’m planning of doing a post about upgrading on PostgreSQL, but for now I think the following places can help, after you decide what you want to do:
- easy and complete step by step set of instructions to upgrade: http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
- option using pg_upgrade: http://claw.triple6.org/debian-update-postgres-major-version
- independently of what you want to do, reading the PostgreSQL docs will give you a better understanding of the process and your options: http://www.postgresql.org/docs/9.4/static/upgrading.html
Just a tip about the error message you are having: PostgreSQL uses the port 5432 by default. To have different versions installed, they have to be set to use different ports, for example 9.3 on port 5432 and 9.4 on port 5433. You are receiving a message telling you that there is already a database using the port 5433. Search for “port =” on /etc/postgresql/_version_/main/postgresql.conf on both versions and confirm they aren’t using the same port.
Hope this can help you.
Quality response Rubens, thanks so much for the pointers!
Great thanks, you saved me a couple of hours! Maybe you should setup a proper repository with keys and all. Also it would be good if you could provide a SHA/md5sum of the tar.gz file
Please help. I keep getting the following error when running ‘sudo apt-get update’:
W: GPG error: http://ftp.debian.org experimental Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 7638D0442B90D010
Hi Chibie,
Sorry for the late response. These type of warnings happen when your system doesn’t have matching repository signature keys. Are you using apt from experimental? I would recommend that you download the new Raspbian Jessie image that was released recently and do a fresh Raspbian installation on your SDcard. Then, after your OS is working fine, you can install PostgreSQL on your system. Raspbian Jessie has PostgreSQL version 9.4 on its repository, so you can install the new PostgreSQL version from there.
If you want to known more about the warning that you are having you can read here: https://wiki.debian.org/SecureApt and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763363
Excellent article. Installed without any hiccups… thanks for your diligent work.
Can you explain or point me to information on how I configure postgres after the install. On a CENTOS system I had to edit postgresql.conf to specify IP address and Port to listen to… and I had to edit pg_hba.conf to allow remote access. Could you advise if I need to do the same for the Raspian Install?
Hi marvcode,
Thanks for your comment and congratulations for starting on PostgreSQL.
About your question, PostgreSQL is really concerned about security and only allows local connections after it is installed, thus you have to configure it to allow remote connections. This is the same behavior on any Linux distribution (any OS, actually), so you have to configure it on Raspbian as you did on CentOS. You can find more details on a previous answer or, as always, on PostgreSQL documentation.
Hi,
there’s a small update to the instructions: the signing key can be found at a different location:
http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc
the one in the post gives an error.
Cheers
Hi Simon,
It is strange that the key location posted on the instructions haven’t worked for you. I’m following the exact key location as posted on the PostgreSQL documentation and it is working on every installation I am currently doing, so I am not going to change the instructions above as I prefer to stick with the official documentation. Of course, as there is the same key on the address you’ve posted (http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc), if anyone experiences the same issue, they can try it out.
Thanks for your comment and congrats for making it work for you.
You’re right; after I double checked and retried on a fresh install it did work. Sorry for the comment.
Now trying to get this running inside a Docker container to deploy Postgres on RPi quickly for dev purposes.
I ran into one hiccup using the key. The wget command didn’t download the key anything for some reason. However, this worked
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
Thanks, the install went well, though it did ask if these packages could be installed without verification (which I did). Is this normal, or should they have been authenticated somehow?
Hi Robert,
Yes, it is normal to be warned or asked by your Linux distribution when installing packages from non official places, as it is in this case where you are installing the packages that we have uploaded to Dropbox. These packages are not officially recognized by Raspbian, or course. For security reasons your system has to ask you if you are sure on installing them, so it is always up to you on these cases and the recommendation is to only do the installation when you are completely sure that the packages are safe. We are in the process of creating our own repository with security keys, which will avoid these kind of warnings on your system.
I’ve just noticed that “sudo apt-get install postgresql” now retrieves version 9.4 – that might help some people.
I am actually trying to install the postgresql-client on raspbian so that I can connect the raspberry pi to a Windows Server 2008 box that is running the Postgres Server and display data from the Windows Server on the Raspberry through PHP (auto refreshed website showing database information).
I’ve installed the following packages.
postgresql-client postgresql
php5 libapache2-mod-php5 php5-mysql
apache2
unixodbc unixodbc-dev
So that I can retrieve data from the database located on the Windows Server and display this data on a Kiosk that is powered by my Raspberry Pi 2 running raspbian jessie.
I have been completely unsuccessful in my attempts at this project. I know it is possible as I have seen it done somewhere else.
All packages above install successfully.
I cannot get the psql client to connect to server.
I cannot configure odbc.ini and odbcinst.ini for unixodbc as there is no driver that I can find in my install packages for postgresql. Other sites refer to drivers named libodbcpsql.so or psqlodbc.so but they do not exist on my pi after I install postgres? I have even installed mlocate and updated the db so that I can search for these drivers on my pi to configure for unixodbc, but they simply don’t exist. If you download the client installer from pervasive, the drivers are in that tar package, but obviously I can’t compile a 32bit package on the raspberry as it is arm.
I can’t even get psql to even do a simple connection to my windows box within the raspbian terminal. When I try and connect, it will either throw an error or nothing at all. When the nothing happens, no one on my network can access the database until I kill the command on the raspberry, then the database performs normal immediately following the kill command. (I have to reboot wheezy to finally kill the connection attempt. Jessie will let me break the connection attempt with Control-C.)
Any help or direction is greatly appreciated.
I realized my problem, but still don’t have a solution and this forum is more about PostgreSQL than Pervasive, but I wanted to post my findings.
I made the assumption that Pervasive SQL (PSQL) and PostgreSQL (PSQL) were the same. But even though both install packages have directories labeled PSQL, they are in fact not compatible with each other.
Thanks for getting back, Paul. I was actually trying to figure out your problem, but now everything makes sense
. PostgreSQL and Pervasive PSQL are completely and absolutely different things. Just for starters PostgreSQL is 100% open source, in opposite to Pervasive SQL that is proprietary software. Unfortunately I cannot help you with Pervasive, but if you start on some PostgreSQL projects feel free to send your questions.
Pingback: Compiling Postgis 2.2.0 on Raspian error doesn't install postgis extension | Question and Answer
Hi guys, awesome posts, I’ve used this site for setting up my raspberrypi2 with wheezy previouly and it worked wonderfully, but now that I got the raspberrypi2 with jessie, I’m getting an error in one of the tests at the end of the compilation. I followed each step carefully and the result is this:
t/001_start_stop.pl ..
1..16
ok 1 – pg_ctl –help exit code 0
ok 2 – pg_ctl –help goes to stdout
ok 3 – pg_ctl –help nothing to stderr
ok 4 – pg_ctl –version exit code 0
ok 5 – pg_ctl –version goes to stdout
ok 6 – pg_ctl –version nothing to stderr
ok 7 – pg_ctl with invalid option nonzero exit code
ok 8 – pg_ctl with invalid option prints error message
ok 9 – pg_ctl initdb
ok 10 – configure authentication
ok 11 – pg_ctl start -w
not ok 12 – second pg_ctl start succeeds
# Failed test ‘second pg_ctl start succeeds’
# at /tmp/postgresql-9.4-9.4.5/build/../src/test/perl/TestLib.pm line 204.
ok 13 – pg_ctl stop -w
ok 14 – second pg_ctl stop fails
ok 15 – pg_ctl restart with server not running
ok 16 – pg_ctl restart with server running
# Looks like you failed 1 test of 16.
Dubious, test returned 1 (wstat 256, 0×100)
Failed 1/16 subtests
t/002_status.pl ……
1..2
ok 1 – pg_ctl status with server not running
ok 2 – pg_ctl status with server running
ok
Test Summary Report
——————-
t/001_start_stop.pl (Wstat: 256 Tests: 16 Failed: 1)
Failed test: 12
Non-zero exit status: 1
Files=2, Tests=18, 80 wallclock secs ( 0.23 usr 0.04 sys + 24.45 cusr 5.66 csy s = 30.38 CPU)
Result: FAIL
Makefile:42: recipe for target ‘check’ failed
make[4]: *** [check] Error 1
make[4]: Leaving directory ‘/tmp/postgresql-9.4-9.4.5/build/src/bin/pg_ctl’
Makefile:25: recipe for target ‘check-pg_ctl-recurse’ failed
make[3]: *** [check-pg_ctl-recurse] Error 2
make[3]: Leaving directory ‘/tmp/postgresql-9.4-9.4.5/build/src/bin’
GNUmakefile:69: recipe for target ‘check-world-src/bin-recurse’ failed
make[2]: *** [check-world-src/bin-recurse] Error 2
make[2]: Leaving directory ‘/tmp/postgresql-9.4-9.4.5/build’
debian/rules:182: recipe for target ‘override_dh_auto_test’ failed
make[1]: *** [override_dh_auto_test] Error 1
make[1]: Leaving directory ‘/tmp/postgresql-9.4-9.4.5′
debian/rules:101: recipe for target ‘build’ failed
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
Build command ‘cd postgresql-9.4-9.4.5 && dpkg-buildpackage -b -uc’ failed.
E: Child process failed
Any ideas if this will affect the usage of my db?
Thanks again!
Hi Johan. With the output you’ve sent it’s not possible to have a clear idea of what is going wrong. What is this test you are doing? Are you running this after the PostgreSQL compilation and installation process has been complete? Are you doing this on a fresh Raspbian Jessie install? Is there a PostgreSQL already installed on the SDcard?
Have in mind that the procedure listed on this post is for compiling and installing PostgreSQL 9.4 on the Raspbian Wheezy. If you are using the new Raspbian Jessie on your Raspberry Pi there is no need to compile PostgreSQL 9.4 as Jessie has it already on its repository, therefore a simple “sudo apt-get install postgresql-9.4″ should be enough to install PostgreSQL 9.4. Of course you can still compile it from the PostgreSQL Apt repository if you want, but you have to change the line on the related instruction “1. Add the PostgreSQL Apt Repository (source)” from:
echo "deb-src http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
to
echo "deb-src http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
To answer your question, if you have PostgreSQL already installed and working on your Raspberry Pi, the error that you have reported is not suppose to affect your db, as nothing has been reinstalled, apparently.
Hi there, I installed postgresql 9.4 following your excellent instructions, then ran into the problem detailed in the log below. Short version: I need to compile some native extensions and the ruby gem install program for pg 0.18.4 choked on this. Apparently I need header files from the development version. Could you advise me on how to proceed? Thanks so much!
Installing pg 0.18.4 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
/home/pi/.rvm/rubies/ruby-2.2.3/bin/ruby -r ./siteconf20160215-18178-1vgceb2.rb extconf.rb
checking for pg_config… yes
Using config values from /usr/bin/pg_config
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
checking for libpq-fe.h… no
Can’t find the ‘libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
My goal is to compile C programs that use PostgreSQL.
sudo apt-get install didn’t do it.
I secretly hoped it wouldn’t, because then I could compile PostgreSQL from source. I get _exactly_ the PostgreSQL that works for me.
It worked first time.
libpq and libpq-fe.h were there.
I used git to download PostgreSQL to get the latest, greatest version.
The compile ran at a good clip. I was able to see the module names. On my Intel box, they scroll by so fast I can’t see them.
After installation, I had to do some thingies from the command line, like
ln -s /usr/local/pgsql/bin/psql /usr/local/bin/pgsql
to make it available in the PATH
Here’s my script, plus chatter:
[ted@raspberrypi Downloads]$ cat my_PostgreSQL
#!/bin/bash
pgm=”$0″
echo $LINENO ‘Run’ $pgm
echo $LINENO ‘In directory’ `pwd`
pushd .
set -e
echo $LINENO ‘sudo apt-get install readline-dev’
echo $LINENO ‘sudo apt-get install libssl-dev’
echo $LINENO ‘sudo apt-get install bison’
echo $LINENO ‘sudo apt-get install flex’
echo $LINENO ‘After successful compile, put it in your $PATH:’
echo $LINENO ‘sudo ln -s /usr/local/pgsql/bin/psql /usr/local/bin/psql’
echo $LINENO ‘Check whether it is the right one: which psql’
sleep 4
dir=”postgresql”
read -p ‘make clean? [yN]: ‘
if [[ "$REPLY" == "y" ]]
then
make_clean=”y”
else
make_clean=”n”
fi
echo $LINENO ‘make_clean =’ $make_clean’.’
sleep 4
if [[ -d "$dir" ]]
then
cd “$dir”
echo $LINENO ‘Changed to directory’ “$dir” ‘for git pull.’
git pull
else
mkdir “$dir”
echo $LINENO ‘Created directory’ “$dir” ‘for git clone.’
git clone git://git.postgresql.org/git/postgresql.git “$dir”
cd “$dir”
echo $LINENO ‘Changed to directory’ “$dir”
fi
./configure –help >configure.help
./configure \
–enable-calendar \
–enable-mbstring \
–enable-pdo \
–with-apxs2=/usr/local/apache2/bin/apxs \
–with-gd \
–with-mhash \
–with-mysql \
–with-mysqli \
–with-openssl \
–with-pdo-mysql \
–with-pdo-pgsql \
–with-pdo-sqlite \
–with-pear \
–with-pgsql \
–with-sqlite \
–with-zlib
if [[ "$make_clean" == "y" ]]
then
echo $LINENO ‘making clean.’
make clean
else
echo $LINENO ‘Skipping make clean.’
fi
make
sudo make install
echo $LINENO ‘Making contributed modules’
sleep 7
cd contrib
make all
sudo make install
tput sgr0
popd
echo $LINENO ‘Ran’ $pgm
[ted@raspberrypi Downloads]$
Yes, it’s wordy…but it works.
After installing PostgreSQL 9.5, how can I uninstall former server(s), in my case 9.4?
Thanks Rubens !
Wooow
Tried now with RPI3 and PostgreSQL 9.5 and it works fine….
I would like to try install Postgis extension. Any ideia ?
Works !
https://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS21Debian7src