Postgresql create extension fails - postgresql

I'm using extensions and had no problems so far.
Now I create a new one, and when I call
create extension util;
I get in PG 9.2:
$ create extension util;
FEHLER: Syntaxfehler bei »«
ZEILE 1: create extension util;
and in PG 9.1 :
CREATE EXTENSION util;
ERROR: syntax error at or near "create"
LINE 1: CREATE EXTENSION util;
I have an util--1.0.sql , and even when this file is empty I get the error.
my util.control looks like this:
comment ='Hilfsfunktionen für Updateskripte'
default_version = '1.0'
schema=system
Any hints ?
Rolf

I'm pretty sure that the server you're connecting to is neither 9.1 nor 9.2. Connect to it and run SELECT version(); to confirm.

Related

PostGIS: function ST_AsRaster does not exist. Even using examples from the docs

I'm trying to convert geometries to images, and the functions to do so don't seem to exist.
The following example is from the ST_AsRaster Docs WHich specify the requirements are Availability: 2.0.0 - requires GDAL >= 1.6.0.
SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1,5),10),150, 150));
This results in:
ERROR: function st_asraster(geometry, integer, integer) does not exist
LINE 1: SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1,5),10),150,...
I found some info that points towards needing GDAL drivers, however, when I try:
SELECT short_name, long_name FROM ST_GdalDrivers();
I get:
ERROR: function st_gdaldrivers() does not exist
LINE 1: SELECT short_name, long_name FROM ST_GdalDrivers();
I have no idea where to even go to try solving this, why don't the functions exist, was there some config I needed to add, some doc I didn't read?
Even the https://postgis.net/docs/RT_reference.html seems to suggest that it should "just work"?
This is installed from the package manager on Ubuntu 20.0.4.
Version Info SELECT PostGIS_Full_Version();:
POSTGIS="3.0.0 r17983" [EXTENSION]
PGSQL="120"
GEOS="3.8.0-CAPI-1.13.1 "
PROJ="6.3.1"
LIBXML="2.9.4"
LIBJSON="0.13.1"
LIBPROTOBUF="1.3.3"
WAGYU="0.4.3 (Internal)"
You must have forgotten to install the postgis_raster extension:
CREATE EXTENSION postgis_raster;
This extension is new in PostGIS 3.0; before that, its objects were part of the postgis extension.
The documentation mentions that:
Once postgis is installed, it needs to be enabled in each individual database you want to use it in.
psql -d yourdatabase -c "CREATE EXTENSION postgis;"
-- if you built with raster support and want to install it --
psql -d yourdatabase -c "CREATE EXTENSION postgis_raster;"

Postgresql-8.4: undefined symbol: palloc

I'm trying to set up a database and have to create a function:
create or replace function uuid() returns uuid as 'moss_uuidgen', 'moss_uuidgen' language 'C' strict;
Every time I execute that postgre tells me that in the .so file there is an undefined symbol called palloc
I know this version of Postgresql is outdated but it seems to be the only version working with my project. Does anyone know why postgre doesn't seem to know palloc?
moss=# create or replace function uuid() returns uuid as 'moss_uuidgen',
moss-# 'moss_uuidgen' language 'C' strict;
FEHLER: konnte Bibliothek »/usr/lib/postgresql/8.4/lib/moss_uuidgen.so« nicht laden: /usr/lib/postgresql/8.4/lib/moss_uuidgen.so: undefined symbol: palloc
moss=# \q
moss#McWiki:/usr/local$
the source file is avialble here: https://foundry.openuru.org/hg/MOSS/file/3e78d60a5282/postgresql
I build the files using make and make install.
OS: Ubuntu Server 20.04 LTS with Postgre 8.4
Thanks for the help, I realised that I build the files for psql 9.4 and tried to use it with psql 8.4, what was really dumb. Now afte rebuilding with 8.4 it works fine (at least to create the function, db is still not working with my gameserver)

osm2pgsql: Function AddGeometryColumn doesn't exist

I want to import OSM file into my PostgreSQL database (Windows, Postgres Version 9.2) using the tool Osm2pgsql.
When I run following command
osm2pgsql.exe --create -d mydb artyom.xml -U myuser -W --style default.style
I get the error
SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, 'POINT', 2 );
failed: FEHLER: Funktion addgeometrycolumn(unknown, unknown, integer, unknown,
integer) existiert nicht
LINE 1: SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, ...
^
HINT: Keine Funktion stimmt mit dem angegebenen Namen und den Argumenttypen ├╝b
erein. Sie m├╝ssen m├Âglicherweise ausdr├╝ckliche Typumwandlungen hinzuf├╝gen.
Error occurred, cleaning up
Translation from German:
SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, 'POINT', 2 );
failed: ERROR: Function addgeometrycolumn(unknown, unknown, integer, unknown,
integer) doesn't exist
LINE 1: SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, ...
^
HINT: No function matches the specified name and argument types. Maybe you need
to make explicit casts.
Error occurred, cleaning up
How can I fix this?
It looks like you haven't added PostGIS support to the database you're trying to use osm2pgsql.exe on. See the PostGIS installation documentation (2.0).
Since you are using PostGIS 2.0, you should be able to just CREATE EXTENSION postgis; to load PostGIS. This command must be run as a superuser - normally the user postgres. Use:
psql -U postgres mydbname
to connect as user postgres.
It appears that at least the Windows builds of osm2pgsql don't support PostGIS 2.0 - or didn't about six months ago, anyway. See this issue report on the OSM GitHub, and the instructions on how to set a PostGIS 2 database to be compatible with an osm2pgsql that expects PostGIS 1.x. Future readers should check that these steps are still actually required before proceeding; it's likely that osm2pgsql for Windows will be updated to support PostGIS 2 at some point.
Rather late but I stumbled and tripped upon this Sept '16. The SQL line:
SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, 'POINT', 2 );
needs to be rewritten as this function signature:
('catalog','schema','table','column',srid,'type',type_mod,boolean);
White space is immaterial. So something like the following should do the trick:
SELECT AddGeometryColumn('','','planet_osm_point', 'way', 900913, 'POINT', 2,true );
Check one of the actual INSERT statements for the correct column name which in my version is 'geom'.
Ensure that varchars are quoted, integers and boolean are unquoted and of course that the right values are in the places.
Good luck.

PostgreSQL pgp_sym_encrypt() broken in version 9.1

The following works in PostgreSQL 8.4:
insert into credentials values('demo', pgp_sym_encrypt('password', 'longpassword'));
When I try it in version 9.1 I get this:
ERROR: function pgp_sym_encrypt(unknown, unknown) does not exist LINE
1: insert into credentials values('demo', pgp_sym_encrypt('pass...
^ HINT: No function matches the given name and argument types. You might need to add
explicit type casts.
*** Error ***
ERROR: function pgp_sym_encrypt(unknown, unknown) does not exist SQL
state: 42883 Hint: No function matches the given name and argument
types. You might need to add explicit type casts. Character: 40
If I try some explicit casts like this
insert into credentials values('demo', pgp_sym_encrypt(cast('password' as text), cast('longpassword' as text)))
I get a slightly different error message:
ERROR: function pgp_sym_encrypt(text, text) does not exist
I have pgcrypto installed. Does anyone have pgp_sym_encrypt() working in PostgreSQL 9.1?
On explanation could be that the module was installed into a schema that is not in your search path - or to the wrong database.
Diagnose your problem with this query and report back the output:
SELECT n.nspname, p.proname, pg_catalog.pg_get_function_arguments(p.oid) as params
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE p.proname ~~* '%pgp_sym_encrypt%'
AND pg_catalog.pg_function_is_visible(p.oid);
Finds functions in all schemas in your database. Similar to the psql meta-command
\df *pgp_sym_encrypt*
Make sure you install the extension on the desired schema.
sudo -i -u postgres
psql $database
CREATE EXTENSION pgcrypto;
OK, problem solved.
I was creating the pgcrypto extension as the first operation in the script. Then I dropped and added the VGDB database. That's why pgcrypto was there immediately after creating it, but didn't exist when running the sql later in the script or when I opened pgadmin.
This script is meant for setting up new databases and if I had tried it on a new database the create extension would have failed right away.
My bad. Thanks for the help, Erwin.
Just mention de schema where is installed pgcrypto like this:
#ColumnTransformer(forColumn = "TEST",
read = "public.pgp_sym_decrypt(TEST, 'password')",
write = "public.pgp_sym_encrypt(?, 'password')")
#Column(name = "TEST", columnDefinition = "bytea", nullable = false)
private String test;
I ran my (python) script again and the CREATE EXTENSION ran without error. The script also executes this command
psql -d VGDB -U postgres -c "select * from pg_available_extensions order by name"
which includes the following in the result set:
pgcrypto | 1.0 | 1.0 | cryptographic functions
So psql believes that it has installed pgcrypto.
Later in the same script when I execute
psql -d VGDB -U postgres -f sql/Create.Credentials.table.sql
where sql/Create.Credentials.table.sql includes this
insert into credentials values('demo', pgp_sym_encrypt('password', 'longpassword'));
I get this
psql:sql/Create.Credentials.table.sql:31: ERROR: function pgp_sym_encrypt(unknown, unknown) does not exist
LINE 1: insert into credentials values('demo', pgp_sym_encrypt('pass...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
When I open pgadmin it does not show pgcrypto in either the VGDB or postgres databases even though the query above called by psql shows that pgcrypto is installed.
Could there be an issue with needing to commit after using psql to execute the "create extension ..." command? None of my other DDL or SQL statements require a commit when they get executed with psql.
It's starting to look like psql is just flakey. Is there another way to call "create extension pgcrypto" - e.g. with Python's database support classes - or does that have to be run through psql?

How to generate uuid with PostgreSQL 8.4.4 on Ubuntu 10.04?

I am running PostgreSQL 8.4.4 with Ubuntu 10.04.
I am trying to generate uuid but can't find a way to do it.
I do have the uuid-ossp.sql in /usr/share/postgresql/8.4/contrib/uuid-ossp.sql
When I try this is what I get :
postgres=# SELECT uuid_generate_v1();
ERROR: function uuid_generate_v1() does not exist
LINE 1: SELECT uuid_generate_v1();
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Any idea ?
The stuff in contrib aren't run automatically. You have to run it yourself to install the functions. I don't know about the 8.4 version, but in the 8.3 version it appears to only install it per-database, so open up the database you're using in psql and issue the command \i /usr/share/postgresql/8.4/contrib/uuid-ossp.sql
I saw this in my PostgreSQL travels. It requires the pgcrypto contrib module.
CREATE OR REPLACE FUNCTION generate_uuid() RETURNS UUID AS
$$
SELECT ENCODE(GEN_RANDOM_BYTES(16), 'hex')::UUID
$$ LANGUAGE SQL IMMUTABLE;