Contao-Camp 2024
Ergebnis 1 bis 17 von 17

Thema: [GELÖST] Datenbank aktualisieren...Add Key zu allen Tabellen

  1. #1
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard [GELÖST] Datenbank aktualisieren...Add Key zu allen Tabellen

    Guten Morgen!

    ich habe seit heute früh eine komische Ansicht beim aktualisieren Datenbank:

    ALTER TABLE `tl_log` ADD PRIMARY KEY (`id`);

    ALTER TABLE `tl_search` ADD PRIMARY KEY (`id`);

    ALTER TABLE `tl_search` ADD UNIQUE KEY `url` (`url`);

    ALTER TABLE `tl_search` ADD UNIQUE KEY `checksum_pid` (`checksum`, `pid`);

    ALTER TABLE `tl_search` ADD FULLTEXT KEY `text` (`text`);

    ALTER TABLE `tl_search_index` ADD PRIMARY KEY (`id`);

    ALTER TABLE `tl_search_index` ADD KEY `pid` (`pid`);

    ALTER TABLE `tl_search_index` ADD KEY `word` (`word`);

    ALTER TABLE `tl_search_index` ADD KEY `language` (`language`);

    ALTER TABLE `tl_session` ADD PRIMARY KEY (`id`);

    ALTER TABLE `tl_session` ADD KEY `pid` (`pid`);

    ALTER TABLE `tl_session` ADD UNIQUE KEY `hash` (`hash`);

    ALTER TABLE `tl_style` ADD PRIMARY KEY (`id`);

    und das setzt sich fort für jede Tabelle.

    Außerdem gibt es für jede Tabelle noch:

    ALTER TABLE `tl_mgz_genes` CHANGE `mgz_id` `mgz_id` varchar(255) NOT NULL unique default '';

    ALTER TABLE `tl_mgz_tags` CHANGE `title` `title` varchar(255) NOT NULL UNIQUE;

    ALTER TABLE `tl_log` CHANGE `id` `id` int(10) unsigned NOT NULL auto_increment;

    hat jemand eine Ahnung was es damit auf sich hat, bzw. wie ich das beheben kann?

    Wenn ich das ausführen will kommt natürlich ein Fehler, beim oberen:
    Uncaught exception 'Exception' with message 'Query error: Duplicate entry '0' for key 'PRIMARY' (ALTER TABLE `tl_search` ADD PRIMARY KEY (`id`)

    und beim unteren:
    Uncaught exception 'Exception' with message 'Query error: Incorrect table definition; there can be only one auto column and it must be defined as a key (ALTER TABLE `tl_log` CHANGE `id` `id` int(10) unsigned NOT NULL auto_increment'

    Die einzige Änderung die ich gemacht habe, ist die Tabellen zu exportieren für ein Testsystem und von dort wieder zu importieren.

    Viele Grüße
    D.

    P.S. Die Seite funktioniert sonst einwandfrei...
    Geändert von Dnageiw (07.11.2019 um 12:17 Uhr)

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.898
    Partner-ID
    10107

    Standard

    Zitat Zitat von Dnageiw Beitrag anzeigen
    Die einzige Änderung die ich gemacht habe, ist die Tabellen zu exportieren für ein Testsystem und von dort wieder zu importieren.
    Da scheint wohl ein Fehler passiert zu sein. Hast du ein Backup der ursprünglichen Datenbank?

  3. #3
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    das auf meinem lokalen System, da kommen diese Meldungen auch nicht. Wenn ich diese Datenbank aber importiere sind sie auf dem live System wieder da

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.898
    Partner-ID
    10107

    Standard

    Wie exportierst und importierst du die Datenbanken?

  5. #5
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    über die Funktion in phpmyadmin

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.898
    Partner-ID
    10107

    Standard

    Wie alt ist der phpMyAdmin? Welche Optionen nutzt du dort? Ich würde dir empfehlen statt phpMyAdmin ein Tool wie HeidiSQL, Sequel Pro oder SQLyog etc. zu verwenden.

  7. #7
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    Hm, die lokale Version ist 4.9.0.1, aber die auf dem Server ist 2.11.11.1.
    Danke für den Tipp!

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.898
    Partner-ID
    10107

    Standard

    Zitat Zitat von Dnageiw Beitrag anzeigen
    Hm, die lokale Version ist 4.9.0.1, aber die auf dem Server ist 2.11.11.1.
    Danke für den Tipp!
    Dann würde ich generell mal versuchen beides per Konsole zu machen:
    Code:
    mysqldump --hex-blob --user=[USER] --password [DATABASE] > dump.sql
    Code:
    mysql --user=[USER] --password [DATABASE] < dump.sql

  9. #9
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    super danke, versuche ich mal!

  10. #10
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    Anbei gleich noch eine Frage:

    ALTER TABLE `tl_genes` DROP INDEX `gene_id`;

    ALTER TABLE `tl_genes` DROP INDEX `gene_id_2`;

    ALTER TABLE `tl_genes` DROP INDEX `gene_id_3`;

    ALTER TABLE `tl_genes` DROP INDEX `gene_id_4`;

    ALTER TABLE `tl_genes` DROP INDEX `gene_id_5`;

    ALTER TABLE `tl_genes` DROP INDEX `gene_id_6`;

    Nach jedem Aktualisieren der Datenbank wird ein solcher Befehl hinzugefügt, vermutlich ist da die sql-Zeile in der dca nicht richtig oder?

    Danke Dir für Deine schnellen Antworten

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.898
    Partner-ID
    10107

    Standard

    Poste mal das DCA.

  12. #12
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.446
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zum Problem aus dem ersten Beitrag: in den Tabellen tl_log, tl_search, .... sind für den Key 0 mehr als 1 Eintrag vorhanden. Kann auch u.U. andere Spalten betreffen. Muss beim Import der DB passieren (ggf. wenn man das 2 Mal macht).

    Lösung: Im Backend in der Systemwartung die Tabellen alle leeren. Danach das Installtool ausführen ... sollte klappen.

  13. #13
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    Hier der Eintrag für das Feld, oder brauchst Du die gesamte dca?

    'gene_id' => array(
    'sql' => "varchar(255) NOT NULL unique default ''"
    )

    Wie kann ich so ein Code Fenster erstellen? Damit es bisschen übersichtlicher ist

    @cliffparnitzky: Danke auch Dir, ich hab die Anpassungen jetzt händisch gemacht. zukünftige Imports werde ich erstmal nicht mehr über PHPMyAdmin machen und schauen ob das dann geht.

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.898
    Partner-ID
    10107

    Standard

    Zitat Zitat von Dnageiw Beitrag anzeigen
    Hier der Eintrag für das Feld, oder brauchst Du die gesamte dca?

    'gene_id' => array(
    'sql' => "varchar(255) NOT NULL unique default ''"
    )

    Wie kann ich so ein Code Fenster erstellen? Damit es bisschen übersichtlicher ist
    Das gesamte DCA in [code].

  15. #15
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    hier ist er :

    Code:
    <?php 
    
    /**
     * 
     * @package   Diagnostik 
     * @license   GNU/LGPL 
     */
    
    
    /**
     * Table tl_genes 
     */
    $GLOBALS['TL_DCA']['tl_genes'] = array
    (
    
    	// Config
    	'config' => array
    	(
    		'dataContainer'               => 'Table',
    		'enableVersioning'            => true,
    		'sql' => array
    		(
    			'keys' => array
    			(
    				'id' => 'primary'
    			)
    		)
    	),
    
    	// List
    	'list' => array
    	(
    		'sorting' => array
    		(
    			'mode'                    => 2,
    			'fields'                  => array('title'),
    			'flag'                    => 1,
    			'panelLayout'		  	  => 'filter,search;limit'	
    		),
    		'label' => array
    		(
    			'fields'                  => array('title'),
    			'format'                  => '%s'
    		),
    		'global_operations' => array
    		(
    			'all' => array
    			(
    				'label'               => &$GLOBALS['TL_LANG']['MSC']['all'],
    				'href'                => 'act=select',
    				'class'               => 'header_edit_all',
    				'attributes'          => 'onclick="Backend.getScrollOffset();" accesskey="e"'
    			)
    		),
    		'operations' => array
    		(
    			'edit' => array
    			(
    				'label'               => &$GLOBALS['TL_LANG']['tl_genes']['edit'],
    				'href'                => 'act=edit',
    				'icon'                => 'edit.gif'
    			),
                'delete' => array
                (
                    'label'               => &$GLOBALS['TL_LANG']['tl_genes']['delete'],
                    'href'                => 'act=delete',
                    'icon'                => 'delete.gif',
                    'attributes'          => 'onclick="if(!confirm(\'' . $GLOBALS['TL_LANG']['MSC']['deleteConfirm'] . '\'))return false;Backend.getScrollOffset()"'
                ),
    			'show' => array
    			(
    				'label'               => &$GLOBALS['TL_LANG']['tl_genes']['show'],
    				'href'                => 'act=show',
    				'icon'                => 'show.gif'
    			)
    		)
    	),
    
    	// Edit
    	'edit' => array
    	(
    		'buttons_callback' => array()
    	),
    
    	// Palettes
    	'palettes' => array
    	(
    		'__selector__'                => array(''),
    		'default'                     => '{title_legend},title,title_en,omim,alias,is_gene;{methode_legend},methode;{material_legend},material_id;{period_legend},period_id;{panel_legend},panel_id;'
    	),
    
    	// Subpalettes
    	'subpalettes' => array
    	(
    		''                            => ''
    	),
    
    	// Fields
    	'fields' => array
    	(
    		'id' => array
    		(
    			'sql'                     => "int(10) unsigned NOT NULL auto_increment"
    		),
    		'tstamp' => array
    		(
    			'sql'                     => "int(10) unsigned NOT NULL default '0'"
    		),
    		'alias' => array
    		(
    			'label'                   => &$GLOBALS['TL_LANG']['tl_genes']['alias'],
    			'exclude'                 => true,
    			'inputType'               => 'text',
    			'eval'                    => array('rgxp'=>'alnum', 'unique'=>true, 'spaceToUnderscore'=>true, 'tl_class'=>'w50'),
    			'save_callback' => array
    			(
    				array('GenHelper', 'generateAlias')
    			),
    			'sql'                     => "text NULL"
    		),
    		'title' => array
    		(
    			'label'                   => &$GLOBALS['TL_LANG']['tl_genes']['title'],
    			'exclude'                 => true,
    			'inputType'               => 'text',
    			'search'		  		  => true,
    			'eval'                    => array('mandatory'=>true, 'maxlength'=>255, 'tl_class'=>'w50'),
    			'sql'                     => "varchar(255) NOT NULL default ''"
    		),
    		'title_en' => array
    		(
    			'label'                   => &$GLOBALS['TL_LANG']['tl_genes']['title_en'],
    			'exclude'                 => true,
    			'inputType'               => 'text',
    			'search'		  		  => true,
    			'eval'                    => array('mandatory'=>false, 'maxlength'=>255, 'tl_class'=>'w50'),
    			'sql'                     => "varchar(255) NOT NULL default ''"
    		),
    		'omim' => array
    		(
    			'label'                   => &$GLOBALS['TL_LANG']['tl_genes']['omim'],
    			'exclude'                 => true,
    			'inputType'               => 'text',
    			'eval'                    => array('mandatory'=>false, 'maxlength'=>255, 'tl_class'=>'w50'),
    			'sql'                     => "varchar(255) NOT NULL default ''"
    		),
    		'is_gene' => array
    		(
    			'label'                   => &$GLOBALS['TL_LANG']['tl_genes']['is_gene'],
    			'default'				  => '1',
    			'inputType'               => 'radio',
    			'options'				  => array('1'=>'Gen', '2'=>'Erkrankung'),
    			'filter'		  		  => true,
    			'eval'					  => array('tl_class'=>'w50'),
    			'sql'                     => "int(1) unsigned NOT NULL default '0'"
    		),
    		'methode' => array
    		(
    			'label'                   => &$GLOBALS['TL_LANG']['tl_genes']['methode'],
    			'inputType'               => 'select',
    			'foreignKey'		  	  => 'tl_methods.title',
    			'filter'		  		  => true,
    			'eval'                    => array('multiple'=>true, 'mandatory'=>false, 'chosen'=>true, 'tl_class'=>'long'),
    			'sql'                     => "text NULL",
    			'relation'				  => array("type" => 'hasMany','load' => 'eager')
    		),
            'material_id' => array
            (
                'label'                   => &$GLOBALS['TL_LANG']['tl_genes']['material_id'],
                'inputType'               => 'select',
                'foreignKey'		  	  => 'tl_material.title',
                'search'		  		  => true,
                'eval'                    => array('multiple'=>true, 'mandatory'=>false, 'chosen'=>true, 'tl_class'=>'long'),
    			'sql'                     => "text NULL",
                'relation'                => array('type' => 'hasMany','load' => 'eager')
            ),
            'period_id' => array
            (
                'label'                   => &$GLOBALS['TL_LANG']['tl_genes']['period_id'],
                'inputType'               => 'select',
                'foreignKey'		  	  => 'tl_period.title',
                'search'		  		  => true,
                'eval'                    => array('multiple'=>false, 'mandatory'=>true),
    			'sql'                     => "text NULL",
                'relation'                => array('type' => 'hasMany','load' => 'eager')
            ),
            'panel_id' => array
            (
                'label'                   => &$GLOBALS['TL_LANG']['tl_genes']['panel_id'],
                'inputType'               => 'select',
                'foreignKey'		  	  => 'tl_subpanels.title',
                'search'		  		  => true,
                'eval'                    => array('multiple'=>true, 'mandatory'=>false, 'chosen'=>true, 'tl_class'=>'long'),
    			'sql'                     => "text NULL",
                'relation'                => array('type' => 'hasMany','load' => 'eager')
            ),
    		'gen_id' => array(
    			'sql'                     => "varchar(255) NOT NULL unique default ''"
    		),
    	)
    );
    
    
    class GenHelper extends Backend{
    
    	/**
    	 * Import the back end user object
    	 */
    	public function __construct()
    	{
    		parent::__construct();
    		$this->import('BackendUser', 'User');
    	}
    
    	/**
    	 * Auto-generate an article alias if it has not been set yet
    	 * @param mixed
    	 * @param \DataContainer
    	 * @return string
    	 * @throws \Exception
    	 */
    	public function generateAlias($varValue, DataContainer $dc)
    	{
    		$autoAlias = false;
    
    		// Generate alias if there is none
    		if ($varValue == '')
    		{
    			$autoAlias = true;
    			$varValue = standardize(StringUtilrestoreBasicEntities($dc->activeRecord->title));
    		}
    
    		$objAlias = $this->Database->prepare("SELECT id FROM tl_genes WHERE alias=?")
    			->execute($varValue);
    
    		// Check whether the alias exists
    		if ($objAlias->numRows > 1 && !$autoAlias)
    		{
    			throw new Exception(sprintf($GLOBALS['TL_LANG']['ERR']['aliasExists'], $varValue));
    		}
    
    		// Add ID to alias
    		if ($objAlias->numRows && $autoAlias)
    		{
    			$varValue .= '-' . $dc->id;
    		}
    
    		return $varValue;
    	}
    
    }

  16. #16
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.898
    Partner-ID
    10107

    Standard

    Uff, du solltest korrekte Einrückungen benutzen .

    Jedenfalls solltest du das "unique" nicht direkt im SQL benutzen, sondern die config dafür verwenden. Also:
    PHP-Code:
    'gen_id' => array(
        
    'sql' => "varchar(255) NOT NULL default ''"
    ), 
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_genes'] = array
    (

        
    // Config
        
    'config' => array
        (
            
    'dataContainer'               => 'Table',
            
    'enableVersioning'            => true,
            
    'sql' => array
            (
                
    'keys' => array
                (
                    
    'id' => 'primary',
                    
    'gen_id' => 'unique',
                )
            )
        ), 
    Ich denke das muss ich hier noch besser beschreiben.
    Geändert von Spooky (07.11.2019 um 12:53 Uhr)

  17. #17
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    Entschuldige, die scheinen beim kopieren etwas durcheinander geraten zu sein.

    Das werde ich gleich mal probieren!

    Vielen Dank auch für den Link

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •