Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error on reset-tasks : Data too long for column 'uuid' at row 1 #789

Open
Tracked by #783
turtlechase opened this issue Feb 27, 2025 · 9 comments
Open
Tracked by #783

Error on reset-tasks : Data too long for column 'uuid' at row 1 #789

turtlechase opened this issue Feb 27, 2025 · 9 comments

Comments

@turtlechase
Copy link

I'm getting this error when running:
python3 manage.py reset-tasks

root@97ccb7194d40:/app# python3 manage.py reset-tasks
Using database connection: django.db.backends.mysql://tubesync:[hidden]@bansheedb:3306/tubesync
2025-02-27 23:07:37,587 [tubesync/INFO] Resettings all tasks...
2025-02-27 23:07:37,609 [tubesync/INFO] Resetting tasks for source: westcoastflyer
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/django/db/backends/utils.py", line 105, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/django/db/backends/mysql/base.py", line 76, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/usr/local/lib/python3.11/dist-packages/MySQLdb/connections.py", line 280, in query
    _mysql.connection.query(self, query)
MySQLdb.DataError: (1406, "Data too long for column 'uuid' at row 1")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/app/manage.py", line 18, in <module>
    main()
  File "/app/manage.py", line 14, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.11/dist-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.11/dist-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.11/dist-packages/django/core/management/base.py", line 413, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.11/dist-packages/django/core/management/base.py", line 459, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/sync/management/commands/reset-tasks.py", line 32, in handle
    source.save()
  File "/usr/local/lib/python3.11/dist-packages/django/db/models/base.py", line 892, in save
    self.save_base(
  File "/usr/local/lib/python3.11/dist-packages/django/db/models/base.py", line 998, in save_base
    updated = self._save_table(
              ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/django/db/models/base.py", line 1161, in _save_table
    results = self._do_insert(
              ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/django/db/models/base.py", line 1202, in _do_insert
    return manager._insert(
           ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/django/db/models/manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/django/db/models/query.py", line 1847, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/django/db/models/sql/compiler.py", line 1836, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python3.11/dist-packages/django/db/backends/utils.py", line 79, in execute
    return self._execute_with_wrappers(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/django/db/backends/utils.py", line 100, in _execute
    with self.db.wrap_database_errors:
  File "/usr/local/lib/python3.11/dist-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.11/dist-packages/django/db/backends/utils.py", line 105, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/django/db/backends/mysql/base.py", line 76, in execute
    return self.cursor.execute(query, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/usr/local/lib/python3.11/dist-packages/MySQLdb/connections.py", line 280, in query
    _mysql.connection.query(self, query)
django.db.utils.DataError: (1406, "Data too long for column 'uuid' at row 1")
root@97ccb7194d40:/app#
@tcely
Copy link
Contributor

tcely commented Feb 27, 2025

That's a very strange error. The Source object was loaded from the database in the first place. Saving it without changes shouldn't cause any errors.

for source in Source.objects.all():
# Recreate the initial indexing task
log.info(f'Resetting tasks for source: {source}')
verbose_name = _('Index media from source "{}"')
index_source_task(
str(source.pk),
repeat=source.index_schedule,
queue=str(source.pk),
priority=10,
verbose_name=verbose_name.format(source.name)
)
# This also chains down to call each Media objects .save() as well
source.save()
log.info('Done')

What does the schema of your database look like??

@turtlechase
Copy link
Author

turtlechase commented Feb 27, 2025

Schema:

CREATE TABLE `sync_source` (
  `uuid` char(32) NOT NULL,
  `created` datetime(6) NOT NULL,
  `last_crawl` datetime(6) DEFAULT NULL,
  `source_type` varchar(1) NOT NULL,
  `key` varchar(100) NOT NULL,
  `name` varchar(100) NOT NULL,
  `directory` varchar(100) NOT NULL,
  `index_schedule` int(11) NOT NULL,
  `delete_old_media` tinyint(1) NOT NULL,
  `days_to_keep` smallint(5) unsigned NOT NULL CHECK (`days_to_keep` >= 0),
  `source_resolution` varchar(8) NOT NULL,
  `source_vcodec` varchar(8) NOT NULL,
  `source_acodec` varchar(8) NOT NULL,
  `prefer_60fps` tinyint(1) NOT NULL,
  `prefer_hdr` tinyint(1) NOT NULL,
  `fallback` varchar(1) NOT NULL,
  `has_failed` tinyint(1) NOT NULL,
  `copy_thumbnails` tinyint(1) NOT NULL,
  `media_format` varchar(200) NOT NULL,
  `write_nfo` tinyint(1) NOT NULL,
  `download_cap` int(11) NOT NULL,
  `download_media` tinyint(1) NOT NULL,
  `write_json` tinyint(1) NOT NULL,
  `embed_metadata` tinyint(1) NOT NULL,
  `embed_thumbnail` tinyint(1) NOT NULL,
  `enable_sponsorblock` tinyint(1) NOT NULL,
  `sponsorblock_categories` varchar(128) NOT NULL,
  `write_subtitles` tinyint(1) NOT NULL,
  `auto_subtitles` tinyint(1) NOT NULL,
  `sub_langs` varchar(30) NOT NULL,
  `delete_removed_media` tinyint(1) NOT NULL,
  `filter_text` varchar(200) NOT NULL,
  `copy_channel_images` tinyint(1) NOT NULL,
  `delete_files_on_disk` tinyint(1) NOT NULL,
  `filter_seconds` int(10) unsigned DEFAULT NULL CHECK (`filter_seconds` >= 0),
  `filter_seconds_min` tinyint(1) NOT NULL,
  `filter_text_invert` tinyint(1) NOT NULL,
  `index_videos` tinyint(1) NOT NULL,
  `index_streams` tinyint(1) NOT NULL,
  PRIMARY KEY (`uuid`),
  UNIQUE KEY `key` (`key`),
  UNIQUE KEY `name` (`name`),
  UNIQUE KEY `directory` (`directory`),
  KEY `sync_source_created_8079497f` (`created`),
  KEY `sync_source_last_crawl_958645b9` (`last_crawl`),
  KEY `sync_source_source_type_710adae4` (`source_type`),
  KEY `sync_source_index_schedule_67161c8b` (`index_schedule`),
  KEY `sync_source_source_resolution_9ef82fdf` (`source_resolution`),
  KEY `sync_source_source_vcodec_9329d58f` (`source_vcodec`),
  KEY `sync_source_source_acodec_25060130` (`source_acodec`),
  KEY `sync_source_fallback_b73936ab` (`fallback`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

I enabled mysql logs and this is the query that fails:

INSERT INTO `sync_source` (`sponsorblock_categories`, `embed_metadata`, `embed_thumbnail`, `enable_sponsorblock`, `uuid`, `created`, `last_crawl`, `source_type`, `key`, `name`, `directory`, `media_format`, `index_schedule`, `download_media`, `index_videos`, `index_streams`, `download_cap`, `delete_old_media`, `days_to_keep`, `filter_text`, `filter_text_invert`, `filter_seconds`, `filter_seconds_min`, `delete_removed_media`, `delete_files_on_disk`, `source_resolution`, `source_vcodec`, `source_acodec`, `prefer_60fps`, `prefer_hdr`, `fallback`, `copy_channel_images`, `copy_thumbnails`, `write_nfo`, `write_json`, `has_failed`, `write_subtitles`, `auto_subtitles`, `sub_langs`) VALUES ('all', 0, 0, 1, '0b01f2d5-7a0e-42b7-87e6-4cf8db664a5a', '2025-02-25 18:08:41.723118', '2025-02-24 23:14:47.889636', 'i', 'UCgMQxnLWLE8YSLFnH9SHmHQ', 'westcoastflyer', 'westcoastflyer', '{yyyymmdd}_{title}.{ext}', 86400, 1, 1, 0, 604800, 1, 60, '', 0, NULL, 1, 0, 1, '1080p', 'VP9', 'OPUS', 1, 0, 'n', 0, 0, 0, 0, 0, 0, 0, 'en');

Is is saving the UUID with the "-" . If I check what is in the DB it's without the "-" : 0b01f2d57a0e42b787e64cf8db664a5a

@tcely
Copy link
Contributor

tcely commented Feb 27, 2025

That's very helpful. Thanks!

I tracked down the difference.

https://github.com/django/django/blob/558c616c955f7edd89455847cc9081054725cc5a/django/db/backends/mysql/features.py#L329-L332

https://github.com/django/django/blob/558c616c955f7edd89455847cc9081054725cc5a/django/db/models/fields/__init__.py#L2747-L2756

Your database is marked as having a native uuid field type. Django is not converting to a hex string because of this.

I would have thought the migrate would alter the table for this, but that doesn't appear to have happened.

The Django folks apparently punted on trying to automate this...
https://docs.djangoproject.com/en/5.0/releases/5.0/#migrating-uuidfield

Change the "uuid char(32) NOT NULL," to "uuid uuid NOT NULL," and try again.

The example SQL given when that type was added:

ALTER TABLE `sync_source` MODIFY COLUMN `uuid` UUID NOT NULL;

More about the UUID data type:

@tcely tcely moved this from Untriaged to In Progress in Status Feb 28, 2025
@turtlechase
Copy link
Author

This is a fresh installation from days ago btw, I guess one of the migrations did not do the job.

ALTER TABLE `tubesync`.`sync_source`
CHANGE `uuid` `uuid` uuid NOT NULL;

Gives error

Cannot change column 'uuid': used in a foreign key constraint 'sync_media_source_id_36827e1d_fk_sync_source_uuid' of table 'tubesync.sync_media'

This is what I had to run to be able to change

ALTER TABLE `tubesync`.`sync_media` 
DROP FOREIGN KEY `sync_media_source_id_36827e1d_fk_sync_source_uuid`;

ALTER TABLE `tubesync`.`sync_source` 
CHANGE COLUMN `uuid` `uuid` UUID NOT NULL;

ALTER TABLE `tubesync`.`sync_media` 
CHANGE COLUMN `source_id` `source_id` UUID NOT NULL;

ALTER TABLE `tubesync`.`sync_media`
ADD CONSTRAINT `sync_media_source_id_36827e1d_fk_sync_source_uuid`
FOREIGN KEY (`source_id`) REFERENCES `tubesync`.`sync_source` (`uuid`)
ON DELETE CASCADE;

Now reset-tasks worked with no issue.

Thanks!

@tcely tcely moved this from In Progress to Done in Status Feb 28, 2025
@tcely
Copy link
Contributor

tcely commented Feb 28, 2025

I'm glad it's working for you. That on delete for the foreign key isn't shown for my tables.

I setup a MariaDB container just today to test some issues.

Here are the tables the migration created:

CREATE TABLE `sync_media` (
`uuid` uuid NOT NULL,
`created` datetime(6) NOT NULL,
`published` datetime(6) DEFAULT NULL,
`key` varchar(100) NOT NULL,
`thumb` varchar(200) DEFAULT NULL,
`thumb_width` smallint(5) unsigned DEFAULT NULL CHECK (`thumb_width` >= 0),
`thumb_height` smallint(5) unsigned DEFAULT NULL CHECK (`thumb_height` >= 0),
`metadata` longtext DEFAULT NULL,
`can_download` tinyint(1) NOT NULL,
`media_file` varchar(255) DEFAULT NULL,
`skip` tinyint(1) NOT NULL,
`downloaded` tinyint(1) NOT NULL,
`download_date` datetime(6) DEFAULT NULL,
`downloaded_format` varchar(30) DEFAULT NULL,
`downloaded_height` int(10) unsigned DEFAULT NULL CHECK (`downloaded_height` >= 0),
`downloaded_width` int(10) unsigned DEFAULT NULL CHECK (`downloaded_width` >= 0),
`downloaded_audio_codec` varchar(30) DEFAULT NULL,
`downloaded_video_codec` varchar(30) DEFAULT NULL,
`downloaded_container` varchar(30) DEFAULT NULL,
`downloaded_fps` smallint(5) unsigned DEFAULT NULL CHECK (`downloaded_fps` >= 0),
`downloaded_hdr` tinyint(1) NOT NULL,
`downloaded_filesize` bigint(20) unsigned DEFAULT NULL CHECK (`downloaded_filesize` >= 0),
`source_id` uuid NOT NULL,
`manual_skip` tinyint(1) NOT NULL,
`title` varchar(200) NOT NULL,
`duration` int(10) unsigned DEFAULT NULL CHECK (`duration` >= 0),
PRIMARY KEY (`uuid`),
UNIQUE KEY `sync_media_source_id_key_fcc78d4f_uniq` (`source_id`,`key`),
KEY `sync_media_created_61f7b0af` (`created`),
KEY `sync_media_published_7a195efa` (`published`),
KEY `sync_media_key_86e7766a` (`key`),
KEY `sync_media_can_download_0ef818f1` (`can_download`),
KEY `sync_media_skip_7ced4cb6` (`skip`),    
KEY `sync_media_downloaded_bc18c4aa` (`downloaded`),
KEY `sync_media_download_date_02604c5f` (`download_date`),
KEY `sync_media_downloaded_filesize_e6028d20` (`downloaded_filesize`),
KEY `sync_media_manual_skip_dd66e16d` (`manual_skip`),
CONSTRAINT `sync_media_source_id_36827e1d_fk_sync_source_uuid` FOREIGN KEY (`source_id`) REFERENCES `sync_source` (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci ;


CREATE TABLE `sync_source` (
`uuid` uuid NOT NULL,
`created` datetime(6) NOT NULL,
`last_crawl` datetime(6) DEFAULT NULL,
`source_type` varchar(1) NOT NULL,
`key` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
`directory` varchar(100) NOT NULL,
`index_schedule` int(11) NOT NULL,
`delete_old_media` tinyint(1) NOT NULL,          
`days_to_keep` smallint(5) unsigned NOT NULL CHECK (`days_to_keep` >= 0),
`source_resolution` varchar(8) NOT NULL,
`source_vcodec` varchar(8) NOT NULL,
`source_acodec` varchar(8) NOT NULL,
`prefer_60fps` tinyint(1) NOT NULL,
`prefer_hdr` tinyint(1) NOT NULL,
`fallback` varchar(1) NOT NULL,
`has_failed` tinyint(1) NOT NULL,
`copy_thumbnails` tinyint(1) NOT NULL,
`media_format` varchar(200) NOT NULL,
`write_nfo` tinyint(1) NOT NULL,                 
`download_cap` int(11) NOT NULL,
`download_media` tinyint(1) NOT NULL,
`write_json` tinyint(1) NOT NULL,
`embed_metadata` tinyint(1) NOT NULL,
`embed_thumbnail` tinyint(1) NOT NULL,
`enable_sponsorblock` tinyint(1) NOT NULL,
`sponsorblock_categories` varchar(128) NOT NULL,
`write_subtitles` tinyint(1) NOT NULL,
`auto_subtitles` tinyint(1) NOT NULL,
`sub_langs` varchar(30) NOT NULL,
`delete_removed_media` tinyint(1) NOT NULL,
`filter_text` varchar(200) NOT NULL,
`copy_channel_images` tinyint(1) NOT NULL,
`delete_files_on_disk` tinyint(1) NOT NULL,
`filter_seconds` int(10) unsigned DEFAULT NULL CHECK (`filter_seconds` >= 0),
`filter_seconds_min` tinyint(1) NOT NULL,
`filter_text_invert` tinyint(1) NOT NULL,
`index_videos` tinyint(1) NOT NULL,
`index_streams` tinyint(1) NOT NULL,
PRIMARY KEY (`uuid`),
UNIQUE KEY `key` (`key`),
UNIQUE KEY `name` (`name`),
UNIQUE KEY `directory` (`directory`),
KEY `sync_source_created_8079497f` (`created`),
KEY `sync_source_last_crawl_958645b9` (`last_crawl`),
KEY `sync_source_source_type_710adae4` (`source_type`),
KEY `sync_source_index_schedule_67161c8b` (`index_schedule`),
KEY `sync_source_source_resolution_9ef82fdf` (`source_resolution`),
KEY `sync_source_source_vcodec_9329d58f` (`source_vcodec`),
KEY `sync_source_source_acodec_25060130` (`source_acodec`),
KEY `sync_source_fallback_b73936ab` (`fallback`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci ;

@turtlechase
Copy link
Author

Yeah my bad, I just created the default that I could think of.
I updated it with:

ALTER TABLE sync_media DROP FOREIGN KEY sync_media_source_id_36827e1d_fk_sync_source_uuid;
ALTER TABLE sync_media ADD CONSTRAINT sync_media_source_id_36827e1d_fk_sync_source_uuid 
FOREIGN KEY (source_id) REFERENCES sync_source (uuid);

@tcely
Copy link
Contributor

tcely commented Feb 28, 2025

So, the final set of statements was:

ALTER TABLE `sync_media` 
DROP FOREIGN KEY `sync_media_source_id_36827e1d_fk_sync_source_uuid`;

ALTER TABLE `sync_media` 
MODIFY COLUMN `uuid` UUID NOT NULL;

ALTER TABLE `sync_media` 
MODIFY COLUMN `source_id` UUID NOT NULL;

ALTER TABLE `sync_source` 
MODIFY COLUMN `uuid` UUID NOT NULL;

ALTER TABLE `sync_media`
ADD CONSTRAINT `sync_media_source_id_36827e1d_fk_sync_source_uuid`
FOREIGN KEY (`source_id`) REFERENCES `sync_source` (`uuid`);

@turtlechase
Copy link
Author

I actually didn't ran

ALTER TABLE `sync_media` 
MODIFY COLUMN `uuid` UUID NOT NULL;

This is because it was still working since on this table it is a char(36)

CREATE TABLE `sync_media` (
  `uuid` char(36) NOT NULL,
  `created` datetime(6) NOT NULL,
  `published` datetime(6) DEFAULT NULL,
  `key` varchar(100) NOT NULL,
  `thumb` varchar(200) DEFAULT NULL,
  `thumb_width` smallint(5) unsigned DEFAULT NULL CHECK (`thumb_width` >= 0),
  `thumb_height` smallint(5) unsigned DEFAULT NULL CHECK (`thumb_height` >= 0),
  `metadata` longtext DEFAULT NULL,
  `can_download` tinyint(1) NOT NULL,
  `media_file` varchar(255) DEFAULT NULL,
  `skip` tinyint(1) NOT NULL,
  `downloaded` tinyint(1) NOT NULL,
  `download_date` datetime(6) DEFAULT NULL,
  `downloaded_format` varchar(30) DEFAULT NULL,
  `downloaded_height` int(10) unsigned DEFAULT NULL CHECK (`downloaded_height` >= 0),
  `downloaded_width` int(10) unsigned DEFAULT NULL CHECK (`downloaded_width` >= 0),
  `downloaded_audio_codec` varchar(30) DEFAULT NULL,
  `downloaded_video_codec` varchar(30) DEFAULT NULL,
  `downloaded_container` varchar(30) DEFAULT NULL,
  `downloaded_fps` smallint(5) unsigned DEFAULT NULL CHECK (`downloaded_fps` >= 0),
  `downloaded_hdr` tinyint(1) NOT NULL,
  `downloaded_filesize` bigint(20) unsigned DEFAULT NULL CHECK (`downloaded_filesize` >= 0),
  `source_id` uuid NOT NULL,
  `manual_skip` tinyint(1) NOT NULL,
  `title` varchar(200) NOT NULL,
  `duration` int(10) unsigned DEFAULT NULL CHECK (`duration` >= 0),
  PRIMARY KEY (`uuid`),
  KEY `sync_media_created_61f7b0af` (`created`),
  KEY `sync_media_published_7a195efa` (`published`),
  KEY `sync_media_key_86e7766a` (`key`),
  KEY `sync_media_can_download_0ef818f1` (`can_download`),
  KEY `sync_media_skip_7ced4cb6` (`skip`),
  KEY `sync_media_downloaded_bc18c4aa` (`downloaded`),
  KEY `sync_media_download_date_02604c5f` (`download_date`),
  KEY `sync_media_downloaded_filesize_e6028d20` (`downloaded_filesize`),
  KEY `sync_media_manual_skip_dd66e16d` (`manual_skip`),
  KEY `sync_media_source_id_key_fcc78d4f_uniq` (`source_id`,`key`) USING BTREE,
  CONSTRAINT `sync_media_source_id_36827e1d_fk_sync_source_uuid` FOREIGN KEY (`source_id`) REFERENCES `sync_source` (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Running now there was error because there were duplicated keys.
Truncated sync_media table and now am re-running all the tasks, easier then to just fix it manually.

@tcely
Copy link
Contributor

tcely commented Feb 28, 2025

Hmm. I wonder how that one column was larger...

"uuid char(36) NOT NULL" is likely to cause problems because storing the same UUID without and with dashes could easily give duplicated keys errors when both strings are cast to the UUID type.

Please close this issue when you're finished.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

No branches or pull requests

2 participants