Обсуждение: SQL probs with phplib
Hi, I'm trying to set up phplib (release 5) for use with postgresql(6.3 I _think_ but pg_version is empty, and I can't see an actual version number anywhere... ), and having a couple of problems with the supplied file create_database.sql (originally written with mySQL in mind). Specifically, in the first table created: CREATE TABLE active_sessions ( sid varchar(32) DEFAULT '' NOT NULL, name varchar(32) DEFAULT '' NOT NULL, val text, changed varchar(14) DEFAULT '' NOT NULL, PRIMARY KEY (sid,name), KEY changed (changed) ); an error is reported: ERROR: type name lookup of changed failed (In postgres, do I need to go though a 'create type' process here?) and in the second table: CREATE TABLE auth_user ( uid varchar(32) DEFAULT '' NOT NULL, username varchar(32) DEFAULT '' NOT NULL, password varchar(32) DEFAULT '' NOT NULL, perms varchar(255), PRIMARY KEY (uid), UNIQUE k_username (username) ); the following error is generated: ERROR: parser: Syntax error at or near "k_username" (Will this need some additional command aling the lines of 'create unique index'?) Having drawn a blank in searching list archives, I'd be grateful for any advice about what the correct pgsql versions of the above should be. NB: This is posted to two lists - I'm happy to summarise later if people don't want to xpost replies. Thanks, Oliver
Oliver Duke-Williams wrote: > changed varchar(14) DEFAULT '' NOT NULL, > ERROR: type name lookup of changed failed changed is a regular varchar(14) and should be taken by Postgres without problems. At least my Postgres did. > ERROR: parser: Syntax error at or near "k_username" Just don´t name that key (leave out the k_username). Alternatively define the table without keys first and add the keys later using the CREATE INDEX statement. > Having drawn a blank in searching list archives, I'd be grateful > for any advice about what the correct pgsql versions of the above > should be. Postgres support is new in release-5 of PHPLIB. There are not many success reports with Postgres up to now. I am a MySQL type myself and very new to Postgres... Kristian -- SH Online Dienst GmbH, Kristian Koehntopp, Siemenswall, 24107 Kiel, +49 431 386 436 00 Using PHP3? See our web development library at http://phplib.shonline.de/ (GPL)
Oliver Duke-Williams wrote:
> Hi,
>
> I'm trying to set up phplib (release 5) for use with postgresql(6.3 I
> _think_ but pg_version is empty, and I can't see an actual version
> number anywhere... ), and having a couple of problems with the supplied
> file create_database.sql (originally written with mySQL in mind).
>
> Specifically, in the first table created:
>
> CREATE TABLE active_sessions (
> sid varchar(32) DEFAULT '' NOT NULL,
> name varchar(32) DEFAULT '' NOT NULL,
> val text,
> changed varchar(14) DEFAULT '' NOT NULL,
> PRIMARY KEY (sid,name),
> KEY changed (changed)
> );
>
> an error is reported:
>
> ERROR: type name lookup of changed failed
>
> (In postgres, do I need to go though a 'create type' process here?)
>
Try
CREATE TABLE active_sessions (
sid varchar(32) DEFAULT '',
name varchar(32) DEFAULT '',
val text,
changed varchar(14) DEFAULT '' NOT NULL,
PRIMARY KEY (sid,name),
);
CREATE [UNIQUE] INDEX {index_name} ON active_sessions USING btree(changed);
-- NOT NULL is implied in a primary key
> and in the second table:
>
> CREATE TABLE auth_user (
> uid varchar(32) DEFAULT '' NOT NULL,
> username varchar(32) DEFAULT '' NOT NULL,
> password varchar(32) DEFAULT '' NOT NULL,
> perms varchar(255),
> PRIMARY KEY (uid),
> UNIQUE k_username (username)
> );
>
> the following error is generated:
>
> ERROR: parser: Syntax error at or near "k_username"
>
> (Will this need some additional command aling the lines of
> 'create unique index'?)
>
And:
CREATE TABLE auth_user (
uid varchar(32) PRIMARY KEY DEFAULT '',
username varchar(32) DEFAULT '' NOT NULL,
password varchar(32) DEFAULT '' NOT NULL,
perms varchar(255)
);
CREATE UNIQUE INDEX username_k ON auth_user USING btree(username);
-- Though correct syntactically, a DEFAULT for any key column rarely makes
good sense.
--
\h create table
-- at the psql prompt display allowable syntax