从架构PostgreSQL上的sql文件创建表

时间:2013-12-15 17:57:20

标签: postgresql

我尝试在我的架构上从文件创建表,但是我收到错误消息。在公共模式上创建的用户表已成功,但我在test1模式上创建的其他表是错误的。我不知道为什么,请帮帮我。 感谢提前。

CREATE SCHEMA test1 
    --Create sequence
CREATE SEQUENCE test1.table_id_seq START 1;


--Create function to auto generate ID
CREATE OR REPLACE FUNCTION test1.next_id(OUT result bigint) AS $$
DECLARE
    our_epoch bigint := 1314220021721;
    seq_id bigint;
    now_millis bigint;
    shard_id int := 1;
BEGIN
    SELECT nextval('test1.table_id_seq') % 1024 INTO seq_id;

    SELECT FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 1000) INTO now_millis;
    result := (now_millis - our_epoch) << 23;
    result := result | (shard_id << 10);
    result := result | (seq_id);
END;
$$ LANGUAGE PLPGSQL;

--Talbe ----users----
CREATE TABLE users
(
    id bigserial NOT NULL PRIMARY KEY,
    username varchar(30) NOT NULL UNIQUE,
    password varchar NOT NULL,
    first_name varchar(10),
    last_name varchar(10),
    profile_picture varchar,
    create_time timestamp (0) without time zone
);


--Table ----photos----
CREATE TABLE test.photos
(
    id bigint NOT NULL PRIMARY KEY DEFAULT test1.next_id(),
    caption text,
    low_resolution varchar,
    hight_resolution varchar,
    thumnail varchar,
    user_id bigint NOT NULL REFERENCES users(id),
    create_time timestamp (0) without time zone

--Table ----comments----
CREATE TABLE test1.comments
(
    id bigint NOT NULL PRIMARY KEY DEFAULT test1.next_id(),
    create_time timestamp (0) without time zone,
    text text,
    user_id bigint REFERENCES users(id),
    photo_id bigint REFERENCES test1.photos(id)
);

--Table ----likes----
CREATE TABLE test1.likes
(
    photo_id bigint REFERENCES test1.photos(id),
    user_id bigint REFERENCES users(id),
);

--Table ----follows----
CREATE TABLE test1.follows
(
    user_id bigint NOT NULL REFERENCES users(id),
    target_id bigint NOT NULL REFERENCES users(id),
);

CREATE TABLE teset1.feeds
(
    user_id bigint NOT NULL REFERENCES users(id),
    photo_id bigint NOT NULL REFERENCES test1.photos(id),
    create_time timestamp (0) without time zone,
);

1 个答案:

答案 0 :(得分:2)

那么,向我们展示您获得的错误以及您尝试修复错误的内容对您有所帮助。但是,您发布的SQL存在一些明显的问题:

  1. “CREATE SCHEMA test1”后缺少分号
  2. 在CREATE TABLE test.photos ...
  3. 结尾处缺少关闭paren和分号
  4. 转储忽略了创建“照片”表想要去的“测试”架构。
  5. test1.photos.id的几个外键引用,但“照片”是在“test”架构中创建的,而不是“test1”。
  6. 多个表的最后一列定义后的无关尾随逗号
  7. 错字:“teset1.feeds”,应该是“test.feeds”
  8. TL; DR 创建此转储文件的人并未密切关注。

    解决了上述所有问题后,我设法加载了SQL。