Ошибка неверный синтаксис для типа bigint

Исключение JavaScript «недопустимый синтаксис BigInt» возникает, когда строковое значение приводится к BigInt , но не может быть проанализировано как целое число.

SyntaxError:неверный синтаксис BigInt

Исключение JavaScript «недопустимый синтаксис BigInt» возникает, когда строковое значение приводится к BigInt , но не может быть проанализировано как целое число.

Message

SyntaxError: Cannot convert x to a BigInt (V8-based)
SyntaxError: invalid BigInt syntax (Firefox)
SyntaxError: Failed to parse String to BigInt (Safari)

Error type

Что пошло не так?

При использовании функции BigInt() для преобразования строки в BigInt строка будет анализироваться так же, как и исходный код, и результирующее значение должно быть целым числом.

Examples

Invalid cases

const a = BigInt("1.5");
const b = BigInt("1n");
const c = BigInt.asIntN(4, "8n");

Valid cases

const a = BigInt("1");
const b = BigInt("  1   ");
const c = BigInt.asIntN(4, "8");

See also

  • BigInt


JavaScript

  • RangeError:неправильная длина массива

    Исключение JavaScript «Недопустимая длина массива» возникает при указании отрицательного числа с плавающей запятой или превышает максимальное значение, поддерживаемое платформой.

  • SyntaxError:недопустимое присвоение левой стороны

    Исключение JavaScript «недопустимое назначение слева» возникает, когда где-то произошло неожиданное.

  • TypeError: неверное присвоение константе «x»

    Исключение JavaScript «недопустимое присвоение константе» возникает при попытке изменить постоянное значение.

  • RangeError:недействительная дата

    Исключение JavaScript «недопустимая дата» возникает, когда была предоставлена ​​строка, ведущая к Date.parse().

Issue Description

We have a definition for a createdAt column as BIGINT in postgres. We’ve had the defaultValue in sequelize defined and working as:

createdAt: {
    type: DataTypes.INTEGER,
    defaultValue: Sequelize.literal('current_millis()'),
  }

This has been working consistently without issue until approximately June 1st, 11am PST.

Now when performing inserts we receive the error message:

 Unexpected error: invalid input syntax for type bigint: "[object Object]"
SequelizeDatabaseError: invalid input syntax for type bigint: "[object Object]"

What are you doing?

Nothing has changed on our end, so I’m not sure how to provide reproduction to the issue..

What do you expect to happen?

We expect the inserts to interpolate the defaultValue correctly and pass our literal current_millis() function to postgres.

What is actually happening?

We see the error.

Additional context

Inspecting the values being passed it seems that the literal function is not being run and instead a javascript string representation of the sequelize.literal is being set. Inspecting the createdAt definition returns:

{
  type: [Function: INTEGER] {
    types: {
      postgres: [Array],
      mysql: [Array],
      mariadb: [Array],
      sqlite: [Array],
      mssql: [Array]
    },
    key: 'INTEGER'
  },
  defaultValue: Literal { val: 'current_millis()' }
}

Looking into the code base it seems that there are some places that explicitly call out when to run the value as a function, e.g. https://github.com/sequelize/sequelize/blob/master/lib/sequelize.js#L1206-L1214

I’m not sure that exact location is where our issue stems from, but hopefully it helps tracking down what is going wrong.

Environment

  • Sequelize version: 5.21.5
  • Node.js version: v13.8.0
  • Operating System: mac

Issue Template Checklist

How does this problem relate to dialects?

  • [ x] I think this problem happens regardless of the dialect.
  • I think this problem happens only for the following dialect(s):
  • I don’t know, I was using PUT-YOUR-DIALECT-HERE, with connector library version XXX and database version XXX

Would you be willing to resolve this issue by submitting a Pull Request?

  • Yes, I have the time and I know how to start.
  • Yes, I have the time but I don’t know how to start, I would need guidance.
  • No, I don’t have the time, although I believe I could do it if I had the time…
  • [x ] No, I don’t have the time and I wouldn’t even know how to start.

Я новичок в PostgreSQL. Я создал ниже функцию PostgreSQL и получил ошибку, как показано ниже:

ERROR:  invalid input syntax for type bigint: "expenseid"
CREATE OR REPLACE FUNCTION insertorupdateinvoice(invoice jsonb)
     RETURNS void
LANGUAGE plpgsql
AS $BODY$
Declare _invoiceid bigint;
begin
  --Consider all columns in specialist table as character varying and code column as integer.
  insert into invoicemaster (expenseid, invoiceno, transactiondate, totalinvoiceamount, invoicedoc, createdby, createdon)
  select j.invoice->>'expenseid'::bigint, 
         j.invoice->>'invoiceno', 
         (j.invoice->>'transactiondate')::date, 
         j.invoice->>'totalinvoiceamount'::double precision, 
         j.invoice->>'invoicedoc', 
         j.invoice->>'createdby'::bigint, 
         (j.invoice->>'createdon')::timestamp without time zone
  from jsonb_array_elements(invoice) as j(invoice)
  returning invoiceid into _invoiceid;
  
  insert into lineitemmaster (invoiceid, transactiondate, merchantname, amount, departmentid, policyid, itemdescription, 
                              itemcategory, itemtype, status, isrejected, createdby, createdon)
  select _invoiceid::bigint, 
        x.invoice->>'transactiondate'::date, 
        x.invoice->>'merchantname', 
        x.invoice->>'amount'::double precision, 
        x.invoice->>'departmentid'::integer, 
        x.invoice->>'policyid'::integer, 
        x.invoice->>'itemdescription', 
        x.invoice->>'itemcategory'::integer, 
        x.invoice->>'itemtype'::integer, 
        x.invoice->>'status'::boolean, 
        x.invoice->>'isrejected'::boolean, 
        x.invoice->>'createdby'::bigint, 
        (x.invoice->>'createdon')::timestamp without time zone
  from jsonb_array_elements(invoice ->'lineitems') as x;
end;
$BODY$;

Я выполняю функцию, как показано ниже:

select * from insertorupdateinvoice('{"expenseid":1,
    "invoiceno":"04012022",
    "transactiondate":"2022-01-04",
    "totalinvoiceamount":1000.00,
    "invoicedoc":"invoicedoc",
    "createdby":"1",
    "list":[
      {"transactiondate":"2022-01-01", "merchantname":"Apple", "amount":"100.50", "departmentid":"1","policyid":"1", "itemdescription":"iphone 14 pro max", "itemcategory":"55", "itemtype":"499", "status":"true", "isrejected":"false", "createdby":"1"},
      {"transactiondate":"2022-01-02", "merchantname":"Samsung", "amount":"1050.35", "departmentid":"2","policyid":"2", "itemdescription":"samsung galaxy tab", "itemcategory":"40", "itemtype":"50", "status":"true", "isrejected":"false", "createdby":"1"},
      {"transactiondate":"2022-01-03", "merchantname":"Big bazar", "amount":"555.75", "departmentid":"3","policyid":"3", "itemdescription":"grocerry", "itemcategory":"5", "itemtype":"90", "status":"false", "isrejected":"false", "createdby":"1"}
    ]}');

Ошибка, которую я получаю, как показано ниже:

ERROR:  invalid input syntax for type bigint: "expenseid"
LINE 2:   select j.invoice->>'expenseid'::bigint, 
                             ^
QUERY:  insert into invoicemaster (expenseid, invoiceno, transactiondate, totalinvoiceamount, invoicedoc, createdby, createdon)
  select j.invoice->>'expenseid'::bigint, 
         j.invoice->>'invoiceno', 
         (j.invoice->>'transactiondate')::date, 
         j.invoice->>'totalinvoiceamount'::double precision, 
         j.invoice->>'invoicedoc', 
         j.invoice->>'createdby'::bigint, 
         (j.invoice->>'createdon')::timestamp without time zone
  from jsonb_array_elements(invoice) as j(invoice)
  returning invoiceid
CONTEXT:  PL/pgSQL function insertorupdateinvoice(jsonb) line 5 at SQL statement
SQL state: 22P02

Итак, я получил решение для этого, как показано ниже, поскольку не используйте имя jsonb при извлечении значений.

    CREATE OR REPLACE FUNCTION public.insertorupdateinvoice(
        invoice jsonb)
        RETURNS void
        LANGUAGE 'plpgsql'
        COST 100
        VOLATILE PARALLEL UNSAFE
    AS $BODY$
    Declare _invoiceid bigint;
    begin
      insert into invoicemaster (expenseid, invoiceno, transactiondate, totalinvoiceamount, invoicedoc, createdby, createdon)
      values ( (invoice->>'expenseid') :: bigint, 
               (invoice->>'invoiceno') :: character, 
               (invoice->>'transactiondate') :: date, 
               (invoice->>'totalinvoiceamount') :: double precision, 
               (invoice->>'invoicedoc') :: character, 
               (invoice->>'createdby') :: bigint,
               NOW()
             )
      returning invoiceid into _invoiceid;

      insert into lineitemmaster (invoiceid, transactiondate, merchantname, amount, departmentid, policyid, itemdescription, 
                                  itemcategory, itemtype, status, isrejected, createdby, createdon)
      select _invoiceid::bigint, 
            (x->>'transactiondate')::date, 
            x->>'merchantname', 
            (x->>'amount')::double precision, 
            (x->>'departmentid')::integer, 
            (x->>'policyid')::integer, 
            x->>'itemdescription', 
            (x->>'itemcategory')::integer, 
            (x->>'itemtype')::integer, 
            (x->>'status')::boolean, 
            (x->>'isrejected')::boolean, 
            (x->>'createdby')::bigint,
            NOW()
      from jsonb_array_elements(invoice ->'lineitems') as x;
    end;
    $BODY$;


0

Krunal
9 Янв 2023 в 11:22

У меня в модели было поле с

book_classes = (("","Select Form"),("1",'F1'),("2",'F2'),("3",'F3'),("4",'F4'),("All Forms","All Forms"))
b_classes = models.CharField('Form',max_length=9,choices=book_classes,default="n/a")

А затем изменил его на

b_class =models.ForeignKey(ClassBooks,on_delete=models.CASCADE)

Где

class ClassBooks(models.Model):
    name = models.CharField(max_length=10,help_text='The class the book belongs to')

Теперь я застрял, потому что когда я пытаюсь мигрировать, я получаю ошибку.

Invalid input syntax for type bigint:"All Forms"

Что мне нужно сделать?

Если вы не хотите потерять db.sqlite3, попробуйте сначала удалить миграции

Шаг 1: Удалите файл db.sqlite3.

Шаг 2 : $ python manage.py migrate

Шаг 3 : $ python manage.py makemigrations

Шаг 4: Создайте суперпользователя с помощью $ python manage.py createsuperuser

новый db.sqlite3 будет сгенерирован автоматически

См. Поле чужого ключа. По умолчанию поле FK будет использовать первичный ключ ссылающейся таблицы (модели), в данном случае поле id из ClassBooks. Поле id является целым числом, поэтому вы получите ошибку при попытке использовать строковое поле. Чтобы заставить это работать, из ссылки на документацию :

ForeignKey.to_field

Поле связанного объекта, к которому относится отношение. По умолчанию Django использует первичный ключ связанного объекта. Если вы ссылаетесь на другое поле, то это поле должно иметь unique=True.

Что в вашем случае становится:

b_class =models.ForeignKey(ClassBooks,to_field='name',on_delete=models.CASCADE)

Это предполагает, что поле name имеет ограничение Unique.

Хотя я не уверен, как "", "1", "2" ... сопоставить с ClassBooks.name.

Вернуться на верх

под управлением COPY результаты ERROR: invalid input syntax for integer: "" сообщение об ошибке для меня. Что я упускаю?

мой :

"age","first_name","last_name"
"23","Ivan","Poupkine"
"","Eugene","Pirogov"

мой :

CREATE TABLE people (
  age        integer,
  first_name varchar(20),
  last_name  varchar(20)
);

COPY people
FROM '/tmp/people.csv'
WITH (
  FORMAT CSV,
  HEADER true,
  NULL ''
);

DROP TABLE people;

выход:

$ psql postgres -f /tmp/sql_test.sql
CREATE TABLE
psql:sql_test.sql:13: ERROR:  invalid input syntax for integer: ""
CONTEXT:  COPY people, line 3, column age: ""
DROP TABLE

Общая информация:

  • PostgreSQL 9.2.4

7 ответов


ошибка: неверный входной синтаксис для integer: «»

"" не является допустимым числом. В PostgreSQL можно без кавычек пустые поля как null по умолчанию в CSV, но "" было бы похоже на написание:

SELECT ''::integer;

и не по той же причине.

если вы хотите иметь дело с CSV, который имеет такие вещи, как цитируемые пустые строки для целых чисел null, вам нужно будет передать его PostgreSQL через предпроцессор, который может немного его подправить. CSV-вход PostgreSQL не понимает всех странных и замечательных возможных злоупотреблений CSV.

варианты:

  • загрузка его в электронную таблицу и экспорт вменяемого CSV;
  • использование Python csv модуль для Perl Text::CSV и т. д. Для предварительной обработки;
  • использование Perl / Python / whatever для загрузки CSV и вставки его непосредственно в DB
  • используя инструмент ETL, как CloverETL, Talend Studio, или Pentaho чайник

Я думаю, что лучше изменить csv-файл, например:

"age","first_name","last_name"
23,Ivan,Poupkine
,Eugene,Pirogov

также можно определить вашу таблицу как

CREATE TABLE people (
  age        varchar(20),
  first_name varchar(20),
  last_name  varchar(20)
);

и после копирования, вы можете обменять пустые строки:

select nullif(age, '')::int as age, first_name, last_name
from people

у меня была такая же ошибка на postgres с COPY утверждение, но мой файл tab-разделены вместо запятую и в кавычках.

моя ошибка заключалась в том, что я охотно копировал/вставлял содержимое файла из github, но в этом процессе все вкладки были преобразованы в пробелы, следовательно, ошибка. Мне пришлось загрузить и сохранить raw-файл, чтобы получить хорошую копию.


в конечном итоге это делается с помощью csvfix:

csvfix map -fv '' -tv '0' /tmp/people.csv > /tmp/people_fixed.csv

в случае, если вы точно знаете, какие столбцы должны быть integer или float, вы можете указать только их:

csvfix map -f 1 -fv '' -tv '0' /tmp/people.csv > /tmp/people_fixed.csv

без указания точных столбцов может возникнуть очевидный побочный эффект, когда пустая строка будет превращена в строку с 0 символ.


это должно работать без изменения исходного csv-файла:

alter table people alter column age type text;
copy people from '/tmp/people.csv' with csv;

Я получил эту ошибку при загрузке » / «разделенного CSV-файла, хотя в моем входном файле не было символов»». Оказалось, что я забыл указать формат:

копировать … ОТ… С (ФОРМАТ CSV, разделитель ‘|’).

1

автор: Slobodan Savkovic



Problem/Motivation

Drupal 9.2.7
Unexpected error after enabling webform_group, using PostgreSQL.

DrupalCoreDatabaseDatabaseExceptionWrapper: SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for type bigint: «my_test_form» LINE 5: WHERE «group_content_field_data».»entity_id» = ‘my_test_for… ^: SELECT «base_table».»id» AS «id», «base_table».»id» AS «base_table_id» FROM «group_content» «base_table» INNER JOIN «group_content_field_data» «group_content_field_data» ON «group_content_field_data».»id» = «base_table».»id» WHERE «group_content_field_data».»entity_id» = :db_condition_placeholder_0; Array ( [:db_condition_placeholder_0] => my_test_form ) in DrupalCoreEntityQuerySqlQuery->result() (line 271 of core/lib/Drupal/Core/Entity/Query/Sql/Query.php).
DrupalCoreDatabaseStatementWrapper->execute() (Line: 874)
DrupalCoreDatabaseConnection->query() (Line: 195)
DrupalCoreDatabaseDriverpgsqlConnection->query() (Line: 512)
DrupalCoreDatabaseQuerySelect->execute() (Line: 145)
DrupalCoreDatabaseDriverpgsqlSelect->execute() (Line: 271)
DrupalCoreEntityQuerySqlQuery->result() (Line: 83)
DrupalCoreEntityQuerySqlQuery->execute() (Line: 166)
Drupalwebform_groupWebformGroupManager->getCurrentGroupContent() (Line: 140)
Drupalwebform_groupWebformGroupManager->getCurrentUserGroupRoles() (Line: 309)
webform_group_webform_access()
call_user_func_array() (Line: 403)
DrupalCoreExtensionModuleHandler->invokeAll() (Line: 97)
DrupalCoreEntityEntityAccessControlHandler->access() (Line: 314)
DrupalCoreEntityEntityBase->access() (Line: 65)
DrupalCoreEntityEntityAccessCheck->access()
call_user_func_array() (Line: 159)
DrupalCoreAccessAccessManager->performCheck() (Line: 135)
DrupalCoreAccessAccessManager->check() (Line: 112)
DrupalCoreAccessAccessManager->checkRequest() (Line: 109)
DrupalCoreRoutingAccessAwareRouter->checkAccess() (Line: 94)
DrupalCoreRoutingAccessAwareRouter->matchRequest() (Line: 112)
SymfonyComponentHttpKernelEventListenerRouterListener->onKernelRequest()
call_user_func() (Line: 142)
DrupalComponentEventDispatcherContainerAwareEventDispatcher->dispatch() (Line: 134)
SymfonyComponentHttpKernelHttpKernel->handleRaw() (Line: 80)
SymfonyComponentHttpKernelHttpKernel->handle() (Line: 57)
DrupalCoreStackMiddlewareSession->handle() (Line: 47)
DrupalCoreStackMiddlewareKernelPreHandle->handle() (Line: 106)
Drupalpage_cacheStackMiddlewarePageCache->pass() (Line: 85)
Drupalpage_cacheStackMiddlewarePageCache->handle() (Line: 47)
DrupalCoreStackMiddlewareReverseProxyMiddleware->handle() (Line: 52)
DrupalCoreStackMiddlewareNegotiationMiddleware->handle() (Line: 23)
StackStackedHttpKernel->handle() (Line: 717)
DrupalCoreDrupalKernel->handle() (Line: 19)

Steps to reproduce

Enable webform_group
And try to build the my_test_form webform

Proposed resolution

Cast entity id as (int).

Remaining tasks

To be patched

User interface changes

no

API changes

no

Data model changes

no

Tag1 supports the Drupal Project.Tag1 logo

Понравилась статья? Поделить с друзьями:
  • Ошибка не удалось загрузить метаданные для репозитория
  • Ошибка не удалось загрузить изображение япикс
  • Ошибка неверный домен ключа что это значит
  • Ошибка не удалось загрузить изображение вконтакте
  • Ошибка неверный домен ключа конфиденциальность условия использования