[Ur] Fatal initialization error: Table 'uw_crud1_t1' does not exist.
Stefan Scott Alexander
stefanscottalexx at gmail.com
Sat May 16 01:17:41 EDT 2015
Recently I installed the latest version of Ur/Web (20150412 release) on a
new machine (using Postgres 9.4.1 on Debian 8 Jessie running on Amazon AWS
EC2), and I am trying to run the Crud1 demo here:
http://www.impredicative.com/ur/demo/crud1.html
When I do:
./crud1.exe
I am getting the error:
Fatal initialization error: Table 'uw_crud1_t1' does not exist.
This seems strange, because I had previously been able to run this example
using the earlier version of Ur/Web on another Debian machine using
Postgres a few months ago.
Since I am using Postgres, I'm not sure if the discussions at these links
(regarding MySQL) are applicable:
http://www.impredicative.com/pipermail/ur/2015-January/001834.html
http://www.impredicative.com/pipermail/ur/2015-April/001929.html
I am using the following files from the Crud1 demo (with a slight
modification to file crud1.urp):
admin:~/wrk/crud1$ ls -l
total 60
-rwxr-xr-x 1 admin admin 35088 May 16 03:45 crud1.exe
-rw-r--r-- 1 admin admin 290 May 16 03:45 crud1.sql
-rw-r--r-- 1 admin admin 460 May 16 02:17 crud1.ur
-rw-r--r-- 1 admin admin 48 May 16 02:19 crud1.urp
-rw-r--r-- 1 admin admin 6148 May 16 02:17 crud.ur
-rw-r--r-- 1 admin admin 953 May 16 02:16 crud.urs
I had changed the file crud1.urp, so that it would now read as follows (I
changed both occurrences of 'test' to 'crud1'):
admin:~/wrk/crud1$ cat crud1.urp
database dbname=crud1
sql crud1.sql
crud
crud1
To compile, I used the command:
admin:~/wrk/crud1$ urweb -dbms postgres -db "host=localhost port=5432
user=admin password=xxxxxxxx dbname=crud1" crud1
Here is generated file crud1.sql:
admin:~/wrk/crud1$ cat crud1.sql
CREATE TABLE uw_Crud1_t1(uw_id int8 NOT NULL, uw_a int8 NOT NULL,
uw_b text NOT NULL, uw_c float8 NOT NULL,
uw_d bool NOT NULL,PRIMARY KEY (uw_id)
);
CREATE SEQUENCE uw_Crud1_seq;
===
I am logged in as user 'admin' on this machine (Debian 8 Jessie running on
Amazon EC2).
I did the following to switch to user 'postgres' and create the database
'crud1' and the (Postgres) user 'admin' and grant all privileges on
database 'crud1' to user 'admin':
admin:~/wrk/crud1$ sudo -i
root$ su - postgres
postgres:~$ createdb crud1
postgres:~$ psql -f /home/admin/wrk/crud1/crud1.sql crud1
postgres:~$ psql
psql (9.4.1)
Type "help" for help.
postgres=# create user admin with password 'xxxxxxxx';
postgres=# grant all on database crud1 to admin;
The following command shows that user 'admin' appears to have "access
privileges" on database 'crud1':
postgres=# \l
Name | Owner | Encoding | Collate | Ctype | Access
privileges
-----------+----------+----------+-------------+-------------+-----------------------
crud1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
=Tc/postgres +
| | | | |
postgres=CTc/postgres+
| | | | |
admin=CTc/postgres
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
=c/postgres +
| | | | |
postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
=c/postgres +
| | | | |
postgres=CTc/postgres
(4 rows)
The following shows that table 'uw_crud1_t1' *does* exist:
postgres=# \c crud1
crud1=# \d
List of relations
Schema | Name | Type | Owner
--------+--------------+----------+----------
public | uw_crud1_seq | sequence | postgres
public | uw_crud1_t1 | table | postgres
(2 rows)
crud1=# select * from uw_crud1_t1;
uw_id | uw_a | uw_b | uw_c | uw_d
-------+------+------+------+------
(0 rows)
So it appears that:
- the database 'crud1' exists
- the user 'admin' with password 'xxxxxxxx' exists and has all privileges
on database 'crud1'
- the table 'uw_crud1_t1' exists - and its name is all lowercase
Note: As shown in the results of doing 'cat crud1.sql' above, the file
crud1.sql did use an uppercase "C" in the table name:
CREATE TABLE uw_Crud1_t1(uw_id int8 NOT NULL, uw_a int8 NOT NULL,
uw_b text NOT NULL, uw_c float8 NOT NULL,
uw_d bool NOT NULL,PRIMARY KEY (uw_id)
);
However, according to results of doing '\l' in psql above, the table name
ended up being all lowercase for some reason.
As a final attempt, I did the following in psql, to grant all privileges on
database 'crud1' to everyone (not just to user 'admin'):
postgres=# grant all on database crud1 to public;
Then I recompiled:
admin:~/wrk/crud1$ urweb -dbms postgres -db "host=localhost port=5432
user=admin password=pgasdfASDF123 dbname=crud1" crud1
But I still got the same error:
admin:~/wrk/crud1$ ./crud1.exe
Fatal initialization error: Table 'uw_crud1_t1' does not exist.
===
I also tried doing this same test with the demo 'Sql':
http://www.impredicative.com/ur/demo/sql.html
This time I didn't change anything in the .urp, .urs and .ur files - using
them exactly as-is.
I got the same results:
admin:~/wrk/sql$ urweb -dbms postgres -db "host=localhost port=5432
user=admin password=xxxxxxxx dbname=test" sql
admin:~/wrk/sql$ sudo -i
root$ su - postgres
postgres:/home/admin/wrk/sql$ createdb test
postgres:/home/admin/wrk/sql$ psql -f /home/admin/wrk/sql/sql.sql test
CREATE TABLE
postgres:/home/admin/wrk/sql$ psql
psql (9.4.1)
Type "help" for help.
postgres=# grant all on database test to admin;
GRANT
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access
privileges
-----------+----------+----------+-------------+-------------+-----------------------
crud1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
=CTc/postgres +
| | | | |
postgres=CTc/postgres+
| | | | |
admin=CTc/postgres
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
=c/postgres +
| | | | |
postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
=c/postgres +
| | | | |
postgres=CTc/postgres
test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
=Tc/postgres +
| | | | |
postgres=CTc/postgres+
| | | | |
admin=CTc/postgres
(5 rows)
postgres=#
admin:~/wrk/sql$ ./sql.exe
Fatal initialization error: Table 'uw_sql_t' does not exist.
admin:~/wrk/sql$ cat sql.sql
CREATE TABLE uw_Sql_t(uw_a int8 NOT NULL, uw_b float8 NOT NULL,
uw_c text NOT NULL, uw_d bool NOT NULL,
PRIMARY KEY (uw_a)
);
===
One thing that seems strange is that the program outputs an error message
using *all-lowercase* in the table name:
Fatal initialization error: Table 'uw_sql_t' does not exist.
But the generated .sql file uses *camelcase* in the table name:
CREATE TABLE uw_Sql_t(uw_a int8 NOT NULL, uw_b float8 NOT NULL,
uw_c text NOT NULL, uw_d bool NOT NULL,
PRIMARY KEY (uw_a)
);
The only guesses I have about what might be going wrong would be the
following - but I'm not sure:
- The urweb compiler may be using the wrong case (camelcase or lowercase)
somewhere?
- There may be something wrong with the privileges or the with Postgres
password for the user 'admin'?
- There may be some confusion between the *Postgres* user 'admin' and the
*Debian* user 'admin'?
Thanks for any help!
###
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.impredicative.com/pipermail/ur/attachments/20150516/25efda88/attachment.html>
More information about the Ur
mailing list