Error syntax error at or near serial

Syntax error at or near & ldquo; SERIAL & rdquo; With autoIncrement only I get the error on build : Server failed to start due to error: SequelizeDatabaseError: syntax error at or near "SERIAL" This error ONLY appears when the parameter autoIncrement=true is given to the primary key. 'use strict'; export default ...

I get the error on build :

Server failed to start due to error: SequelizeDatabaseError: syntax error at or near «SERIAL»

This error ONLY appears when the parameter autoIncrement=true is given to the primary key.

'use strict';

export default function(sequelize, DataTypes) {
  return sequelize.define('Ladder', {
    ladder_id: {
      type: DataTypes.UUID,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true //<------- If commented it works fine
    },
    ladder_name: {
      type: DataTypes.STRING(50),
      allowNull: false,
      unique: true
    },
    ladder_description: {
      type: DataTypes.TEXT,
      allowNull: true
    },
    ladder_open: {
      type: DataTypes.BOOLEAN,
      allowNull: false
    },
    ladder_hidden: {
      type: DataTypes.BOOLEAN,
      allowNull: false
    },
    ladder_creation_date: {
      type: DataTypes.DATE,
      allowNull: false
    },
    ladder_fk_user: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    ladder_fk_game: {
      type: DataTypes.UUID,
      allowNull: false
    },
    ladder_fk_platforms: {
      type: DataTypes.ARRAY(DataTypes.UUID),
      allowNull: false
    }

  },
    {
      schema: 'ladder',
      tableName: 'ladders'
    });
}

I have Sequelize 3.30.4 and postgreSQL 9.6.

I want autoIncrement at true because I am generating the UUID with postgreSQL uuid_generate_v4().


Not a regular sequelize user here but let me point out that using autoIncrement for non sequential column is not the right way in postgreql. Postgresql does not provide a default uuid number generator but an extension can be added easily https://www.postgresql.org/docs/9.4/static/uuid-ossp.html. I believev you have already done so.

The next step then is to us the sequelize.fn function.

Creates an object representing a database function. This can be used in search queries, both in where and order parts, and as default values in column definitions.

so we have

ladder_id: {
    type: DataTypes.UUID,
    allowNull: false,
    primaryKey: true,
    default: sequelize.fn('uuid_generate_v4')
}

>
Проблема при создании таблиц

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему



Сообщ.
#1

,
03.08.11, 05:02

    сейчас решил протестировать контроллер баз данных и переключиться на постгрес. Создал базу, но при создании таблиц из под стандартного функционала phpPgAdmin вылезает ошибка:

    Цитата

    ERROR: syntax error at or near «(«
    LINE 1: …TE TABLE «xgb_chidoridev».»cd_pages» («id» integer(10), «nam…

    В операторе:

    ExpandedWrap disabled

      CREATE TABLE «xgb_chidoridev».»cd_pages» («id» integer(10), «name» character varying(255), «title» character varying(255), «rights» integer(2), «priority» integer(1), «uopen» text, «uclose» text, «updatetime» integer(20), «createtime» integer(20), «theme» character varying(255), PRIMARY KEY («id»)) WITHOUT OIDS

    После прочтения мануала по постгрес, решил сделать так же как впримере — указывать таблицы и поля без кавычек. Но всё равно запрос не проходит. Подскажите, в чём может быть проблема?


    Silver Soft



    Сообщ.
    #2

    ,
    03.08.11, 05:15

      Member

      **

      Рейтинг (т): 4

      в типе integer убери «(…)» и вместо этого пользуйся другими типами, вроде smallint или serial…

      Добавлено 03.08.11, 05:16
      и учти, если ты поле заключаешь в ковычки, то и потом в запросах не забывай их ставить ))


      Serafim



      Сообщ.
      #3

      ,
      03.08.11, 05:19

        Вот так сделал:

        ExpandedWrap disabled

          СREATE TABLE «xgb_chidoridev».»cd_pages» («id» smallint, «name» character varying(255), «title» character varying(255), «rights» smallint, «priority» smallint, «uopen» text, «uclose» text, «updatetime» smallint, «createtime» smallint, «theme» character varying(255), PRIMARY KEY («id»)) WITHOUT OIDS

        Всё равно ошибка вылетает :(


        Silver Soft



        Сообщ.
        #4

        ,
        03.08.11, 05:22

          Member

          **

          Рейтинг (т): 4

          Цитата Serafim @ 03.08.11, 05:19

          Всё равно ошибка вылетает :(

          та же ошибка?

          Цитата Serafim @ 03.08.11, 05:19

          «xgb_chidoridev»

          тебе все в кавычки принципиально нужно? )))


          Serafim



          Сообщ.
          #5

          ,
          03.08.11, 05:24

            Цитата Silver Soft @ 03.08.11, 05:22

            та же ошибка?

            ERROR: syntax error at or near «СREATE»
            LINE 1: СREATE TABLE «xgb_chidoridev».»cd_pages» («id» smallint, «na…

            Цитата Silver Soft @ 03.08.11, 05:22

            тебе все в кавычки принципиально нужно? )))

            Ну это phpPgAdmin по умолчанию ставит :) Просто пока не особо знаком с синтаксисом Postgres, поэтому и использую его интерфейс


            Silver Soft



            Сообщ.
            #6

            ,
            03.08.11, 05:25

              Member

              **

              Рейтинг (т): 4

              вот у меня код создания таблицы:

              ExpandedWrap disabled

                CREATE TABLE phone.stat_201108

                (

                  id integer,

                  authid bigint,

                  dialpeerid bigint,

                  «SRCnum» character varying(50),

                  «DSTnum» character varying(50),

                  «ElapsedTime» bigint,

                  «TimeBegin» timestamp(6) without time zone,

                  «TimeConnect» timestamp(0) without time zone,

                  «TimeDisconnect» timestamp(0) without time zone,

                  «DisconnectCode» character varying(100),

                  «DisconnectInitiator» character varying(20),

                  «QoS» double precision,

                  «SRCproto» character varying(100),

                  «DSTProto» character varying(100),

                  «SRCIP» inet,

                  «DSTIP» inet,

                  «SRCBytesIn» bigint,

                  «DSTBytesIn» bigint,

                  «CallId» integer,

                  «SRCTarifId» integer,

                  «SRCDuration» integer,

                  «SRCCost» double precision,

                  «SRCClientId» integer,

                  «DSTTarifId» integer,

                  «DSTDuration» integer,

                  «DSTCost» double precision,

                  «DSTClientId» integer,

                  «DSTPrefixId» integer,

                  «RootGroup» integer,

                  «DateAdd» timestamp without time zone

                )

                WITH (

                  OIDS=FALSE

                );

                ALTER TABLE phone.stat_201108_old OWNER TO postgres;


              Serafim



              Сообщ.
              #7

              ,
              03.08.11, 05:25

                Цитата Silver Soft @ 03.08.11, 05:22

                тебе все в кавычки принципиально нужно? )))

                ExpandedWrap disabled

                  СREATE TABLE cd_pages (id smallint, name character varying(255), title character varying(255), rights smallint, priority smallint, uopen text, uclose text, updatetime smallint, createtime smallint, theme character varying(255), PRIMARY KEY (id)) WITHOUT OIDS

                Один хрен — эррор:

                Цитата

                ERROR: syntax error at or near «СREATE»
                LINE 1: СREATE TABLE cd_pages (id smallint, name character varying(2…


                Silver Soft



                Сообщ.
                #8

                ,
                03.08.11, 05:26

                  Member

                  **

                  Рейтинг (т): 4

                  «xgb_chidoridev» убери тут хотя бы ))

                  и лучше пользуйся pgAdmin’ом )) им удобней ))

                  Добавлено 03.08.11, 05:26
                  http://www.pgadmin.org/download/


                  Serafim



                  Сообщ.
                  #9

                  ,
                  03.08.11, 05:28

                    Цитата Silver Soft @ 03.08.11, 05:25

                    вот у меня код создания таблицы:

                    ExpandedWrap disabled

                      СREATE TABLE cd_pages (

                          id smallint,

                          «name» character varying(255),

                          «title» character varying(255),

                          rights smallint,

                          priority smallint,

                          uopen text,

                          uclose text,

                          updatetime smallint,

                          createtime smallint,

                          «theme» character varying(255),

                          PRIMARY KEY (id)

                      ) WITHOUT OIDS

                    Всё равно не работает :(

                    Добавлено 03.08.11, 05:29
                    И вот так тоже:

                    Цитата

                    Ошибка SQL:

                    ERROR: syntax error at or near «СREATE»
                    LINE 1: СREATE TABLE cd_pages (
                    ^
                    В операторе:

                    ExpandedWrap disabled

                      СREATE TABLE cd_pages (

                          id smallint,

                          «name» character varying(255),

                          «title» character varying(255),

                          rights smallint,

                          priority smallint,

                          uopen text,

                          uclose text,

                          updatetime smallint,

                          createtime smallint,

                          «theme» character varying(255),

                          PRIMARY KEY (id)

                      )

                      WITH (

                        OIDS=FALSE

                      )

                    Сообщение отредактировано: Serafim — 03.08.11, 05:30


                    Silver Soft



                    Сообщ.
                    #10

                    ,
                    03.08.11, 05:31

                      Member

                      **

                      Рейтинг (т): 4

                      чего-то мне кажется, что phpPgAdmin ерундовничает… я ошибки не вижу ) вроде все написано верно.. во только ощущение, что CREATE (С русская стоит) )))

                      Master

                      ViktorXP



                      Сообщ.
                      #11

                      ,
                      03.08.11, 05:35

                        пс. а почему id smallint. может нужен тип serial?


                        Serafim



                        Сообщ.
                        #12

                        ,
                        03.08.11, 05:36

                          Цитата Silver Soft @ 03.08.11, 05:31

                          во только ощущение, что CREATE (С русская стоит) )))

                          красавец! :dance: Просто когда в 10ый раз правил запрос — первая буква потерялась, перепечатал похоже на русском :rolleyes:

                          Добавлено 03.08.11, 05:36

                          Цитата ViktorXP @ 03.08.11, 05:35

                          пс. а почему id smallint. может нужен тип serial?

                          ну дык яж майсикьюэльщик :) Вы мне тыкните что лучше и где, я запомню и подправлю


                          Silver Soft



                          Сообщ.
                          #13

                          ,
                          03.08.11, 05:38

                            Member

                            **

                            Рейтинг (т): 4

                            для id лучше конечно serial, но я иногда и просто integer использую))

                            Master

                            ViktorXP



                            Сообщ.
                            #14

                            ,
                            03.08.11, 05:39

                              serial это типа bigint auto increment


                              Silver Soft



                              Сообщ.
                              #15

                              ,
                              03.08.11, 05:39

                                Member

                                **

                                Рейтинг (т): 4

                                Цитата Silver Soft @ 03.08.11, 05:38

                                Просто когда в 10ый раз правил запрос — первая буква потерялась, перепечатал похоже на русском

                                бывает)) со всеми бывает )) а если еще не спать сутками, то это уже самая частая ошибка )))

                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                0 пользователей:

                                • Предыдущая тема
                                • Базы данных: SQL
                                • Следующая тема

                                [ Script execution time: 0,0532 ]   [ 15 queries used ]   [ Generated: 13.02.23, 14:52 GMT ]  

                                Я новичок в Postgresql и каждый день узнаю что-то новое. Итак, у меня есть этот блог-проект, в котором я хочу использовать PostgreSQL как базу данных. Но я как бы застрял в самом простом запросе вставки, который выдает ошибку. У меня есть три стола: posts, authors и categories. Думаю, я мог бы правильно создать таблицу, но когда я пытаюсь вставить данные, я получаю эту ошибку:

                                error: syntax error at or near 
                                length: 95,
                                  severity: 'ERROR',
                                  code: '42601',
                                  detail: undefined,
                                  hint: undefined,
                                  position: '122',
                                  internalPosition: undefined,
                                  internalQuery: undefined,
                                  where: undefined,
                                  schema: undefined,
                                  table: undefined,
                                  column: undefined,
                                  dataType: undefined,
                                  constraint: undefined,
                                  file: 'scan.l',
                                  line: '1180',
                                  routine: 'scanner_yyerror'
                                

                                Теперь я не знаю, в чем проблема, и ошибки Postgres не так уж специфичны.

                                Кто-нибудь может сказать мне, где я могу ошибиться?

                                Вот таблицы:

                                const createInitialTables = `
                                        CREATE TABLE authors (
                                             id UUID NOT NULL,
                                             author_name VARCHAR(100) NOT NULL UNIQUE CHECK (author_name <> ''),
                                             author_slug VARCHAR(100) NOT NULL UNIQUE CHECK (author_slug <> ''),
                                             PRIMARY KEY (id)
                                        );
                                
                                        CREATE TABLE posts (
                                             id UUID NOT NULL,
                                             post VARCHAR(500) NOT NULL CHECK (post<> ''),
                                             post_slug VARCHAR(500) NOT NULL CHECK (post_slug <> ''),
                                             author_id UUID NOT NULL,
                                             PRIMARY KEY (id),
                                             CONSTRAINT fk_authors FOREIGN KEY(author_id) REFERENCES authors(id)
                                        );
                                
                                        CREATE TABLE categories (
                                             id UUID NOT NULL,
                                             category_name VARCHAR(50) NOT NULL CHECK (category_name <> ''),
                                             category_slug VARCHAR(50) NOT NULL CHECK (category_slug <> ''),
                                             post_id UUID NOT NULL,
                                             PRIMARY KEY (id),
                                             CONSTRAINT fk_posts FOREIGN KEY(post_id) REFERENCES posts(id)
                                        );
                                
                                `;
                                

                                Вот асинхронная функция, в которой я делаю запрос на вставку:

                                const insertAuthor = async() => {
                                
                                    try {
                                
                                        const data       = await fs.readFile( path.join( __dirname + '../../data/data.json' ) );
                                        const parsedData = JSON.parse( data.toString() );
                                
                                        const authorID   = short.generate();
                                        const authorName = parsedData[ 0 ].author;
                                        const authorSlug = slugify( parsedData[ 0 ].author, {
                                            strict: true,
                                            lower: true
                                        } );
                                
                                        const insertData = `
                                            INSERT INTO authors (id, author_name, author_slug) 
                                            VALUES 
                                            (${authorID}, ${authorName}, ${authorSlug});
                                        `;
                                
                                        await pool.query( insertData );
                                
                                        console.log( 'Data inserted successfully!' );
                                
                                    } catch ( e ) {
                                        console.log( e );
                                    }
                                };
                                
                                insertAuthor();
                                

                                ОБНОВИТЬ—————————————

                                Вот как выглядит файл журнала Postgres:

                                2021-10-18 01:23:16.885 +06 [5964] ERROR:  syntax error at or near "Paton" at character 122
                                2021-10-18 01:23:16.885 +06 [5964] STATEMENT:  
                                                INSERT INTO authors (id, author_name, author_slug) 
                                                VALUES 
                                                (an3cxZh8ZD3tdtqG4wuwPR, Alan Paton, alan-paton);
                                

                                2 ответа

                                Лучший ответ

                                INSERT INTO authors (id, author_name, author_slug) 
                                VALUES 
                                (an3cxZh8ZD3tdtqG4wuwPR, Alan Paton, alan-paton);
                                

                                Ваши строковые значения не заключаются в кавычки. Это должно быть …

                                INSERT INTO authors (id, author_name, author_slug) 
                                VALUES 
                                ('an3cxZh8ZD3tdtqG4wuwPR', 'Alan Paton', 'alan-paton');
                                

                                Вы можете добавить кавычки в свой запрос, но не делайте этого. Ваш запрос в том виде, в котором он написан, небезопасен и уязвим для атаки с использованием SQL-инъекции. Не вставляйте значения в запросы с конкатенацией строк .

                                Вместо этого используйте параметры.

                                const insertSQL = `
                                  INSERT INTO authors (id, author_name, author_slug) 
                                  VALUES ($1, $2, $3);
                                `;
                                await pool.query( insertSQL, [authorID, authorName, authorSlug] );
                                

                                Postgres сделает за вас расценки. Это безопаснее, надежнее и быстрее.


                                Обратите внимание, что an3cxZh8ZD3tdtqG4wuwPR не является допустимым UUID. UUID — это 128-битное целое число, которое часто представляется в виде 32-символьной шестнадцатеричной строки.

                                Обратите внимание, что вы также, вероятно, захотите использовать автоинкремент первичных ключей вместо самостоятельного создания идентификатора. Для первичного ключа UUID загрузите пакет uuid-ossp и используйте его функция UUID по умолчанию.

                                create extension "uuid-ossp";
                                
                                create table authors (
                                  id uuid primary key default uuid_generate_v4(),
                                
                                  -- There's no point in arbitrarily limiting the size of your text fields.
                                  -- They will only use as much space as they need.
                                  author_name text not null unique check (author_name <> ''),
                                  author_slug text not null unique check (author_slug <> '')
                                );
                                
                                insert into authors (author_name, author_slug) 
                                values ('Alan Paton', 'alan-paton');
                                


                                3

                                Schwern
                                17 Окт 2021 в 23:08

                                В запросе INSERT добавьте строковые значения в кавычки —

                                const insertData = `
                                    INSERT INTO authors (id, author_name, author_slug) 
                                    VALUES 
                                    ('${authorID}', '${authorName}', '${authorSlug}');`;  // added the quotes
                                


                                0

                                Vedant
                                17 Окт 2021 в 22:43

                                Понравилась статья? Поделить с друзьями:
                              • Error syntax error at or near second
                              • Error syntax error at or near return
                              • Error syntax error at or near record
                              • Error syntax error at or near like
                              • Error syntax error at or near extension